DB2 的 EXPORT 實用程式可透過 SQL SELECT 或 XQuery 陳述式,將資料庫表格的資料擷取並寫入外部檔案。支援的輸出格式包括 DEL(分隔檔)、IXF(交換格式)與 WSF(工作表格式)。建議在執行匯出時加入 MESSAGES 子句,將執行過程中的錯誤、警告與資訊性訊息記錄至指定檔案,方便事後排查。
成功呼叫 EXPORT 實用程式需具備下列任一權限:
自 DB2 9.1 引入 LBAC 後,匯出受保護資料列時需注意:
下列指令將聯結查詢結果匯出為 DEL 格式檔案,並將訊息記錄至 msg.out:
EXPORT TO myfile.del OF DEL
MESSAGES msg.out
SELECT staff.name, staff.dept, org.location
FROM org, staff
WHERE org.deptnumb = staff.dept;
預設情況下,DEL 格式以逗號分隔欄位、雙引號括住字串。若資料本身包含逗號或引號,會導致匯入/載入時無法正確解析。此時可使用 MODIFIED BY 子句指定檔案類型修飾符:
EXPORT TO file_name OF file_type
MODIFIED BY file_type_modifiers
MESSAGES message_file
select_statement
常用修飾符:
| 修飾符 | 說明 |
|---|---|
chardelx | 指定單一字元字串分隔符(預設:雙引號 ") |
coldelx | 指定單一字元欄位分隔符(預設:逗號 ,) |
codepage=x | 指定輸出資料的碼頁(ASCII 字串),匯出時將字元資料從應用程式碼頁轉換 |
timestampformat="x" | 指定來源表格中時間戳記的格式 |
範例: 以感嘆號作為字串分隔符、@ 作為欄位分隔符、碼頁 1208、時間戳格式 yyyy.mm.dd hh:mm tt 匯出 SCHEDULE 表:
EXPORT TO myfile.del OF DEL
MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"
MESSAGES msg.out
SELECT * FROM schedule
預設僅匯出 LOB 資料前 32 KB,且與其他欄位資料混在同一檔案。為完整匯出並分離儲存,需使用 LOB 選項。DB2 V9.1 起可選擇將多個 LOB 值寫入同一輸出檔(LOBSINFILE)或各自獨立檔案(LOBSINSEPFILES)。
EXPORT TO file_name OF file_type
LOBS TO lobfile_directory_1, lobfile_directory_2, ...
LOBFILE lobfilename
MODIFIED BY LOBSINFILE
MESSAGES message_file
select_statement
LOBS TO:指定 LOB 檔案儲存目錄(可多個),若省略則用目前工作目錄。LOBFILE:指定 LOB 檔案基底名稱,實際檔名會附加序號(如 lobfile.001、lobfile.002)。LOBS TO 或 LOBFILE 時會隱性啟用 LOBSINFILE 行為,建議仍顯式宣告以避免與 LOBSINSEPFILES 混淆。使用 LOBSINFILE 時,匯出檔中會產生 LLS 字串指向 LOB 實際位置,格式:filename.ext.lob.nnn.mmm/
filename.ext.lob:LOB 檔案名(ext 為序號)nnn:LOB 在檔案中的位元組偏移量mmm:LOB 長度(位元組)例如 resume.001.lob.1257.2415/ 表示 LOB 位於 resume.001.lob,從第 1257 位元組開始,長度 2,415 位元組。
EXPORT TO empresume.del OF DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINFILE
MESSAGES msg.out
SELECT * FROM emp_resume

圖 1:LOB 匯出結果示意
若需將每個 LOB 值存成獨立檔案,改用 LOBSINSEPFILES 修飾符,其餘 LOB 選項相同:
EXPORT TO empresume.del OF DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINSEPFILES
MESSAGES msg.out
SELECT * FROM emp_resume
執行後會在 d:\lob1 產生 resume.001.lob、resume.002.lob… 各自包含單一 LOB 值。
DB2 9.1 引入原生 XML 支援,EXPORT 也相應擴充。若不指定 XML 相關選項,XML 資料會寫入與關聯資料分離的檔案。以含 XML 欄位的 PRODUCT 表為例:
EXPORT TO prodexport.del OF DEL
MESSAGES msg.out
SELECT * FROM product
會產生兩個檔案:
prodexport.del:關聯資料與 XML Data Specifier (XDS)prodexport.del.001.xml:實際 XML 內容,所有 XML 文件串接在一起
圖 2:匯出主檔內容含 XDS

圖 3:XML 內容檔
XDS 以 <XDS .../> 標記表示,常見屬性:
FIL:包含 XML 資料的檔案名OFF:XML 資料在檔案中的位元組偏移量LEN:XML 資料長度(位元組)SCH:驗證用 XML Schema 的完整 SQL 識別碼(若有)可指定 XML 檔案儲存路徑、檔名、編碼等:
EXPORT TO prodexport.del OF DEL
XML TO d:\xmlpath
XMLFILE proddesc
MODIFIED BY XMLINSEPFILES XMLNODECLARATION XMLCHAR XMLSAVESCHEMA
MESSAGES msg.out
SELECT * FROM product
主要 XML 修飾符:
| 修飾符 | 說明 |
|---|---|
XMLINSEPFILES | 每個 XML 文件寫入獨立檔案(預設串接在單一檔案) |
XMLNODECLARATION | 不輸出 XML 宣告標記(預設輸出含 encoding 屬性) |
XMLCHAR | XML 資料以字元碼頁編碼(預設 Unicode),搭配 codepage 或應用程式碼頁 |
XMLGRAPHIC | XML 資料以 UTF-16 編碼,忽略 codepage 設定 |
XMLSAVESCHEMA | 保存驗證用 XML Schema,完整 SQL 識別碼存入 XDS 的 SCH 屬性 |

圖 4:帶 XML 選項的匯出結果
EXPORT 也支援直接匯出 XQuery 結果:
EXPORT TO custexport.del OF DEL
XML TO d:\xmlpath
XMLFILE custphone
MODIFIED BY XMLINSEPFILES XMLNODECLARATION
MESSAGES msg.out
SELECT XMLQUERY('$doc/customerinfo/phone' PASSING INFO AS "doc") FROM customer
上例對 CUSTOMER 表的 XML 欄位 INFO 執行 XQuery,取出每位客戶電話號碼,各結果存成獨立 XML 檔(custphone.001.xml、custphone.002.xml…),不含 XML 宣告。

圖 5:XQuery 匯出的 XML 文件範例
除命令列,亦可透過 Control Center 圖形介面執行匯出,支援所有選項(含 LOB、XML),並可在「排程」索引標籤建立排程工作。

圖 6:Control Center 匯出精靈