首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle Spool 技術:將查詢結果直接導出為文字檔案

     編輯:Oracle 資料庫相關知識

基本語法

SPOOL <檔案路徑>   -- 開啟緩衝,指定輸出檔
-- 執行任意 SELECT 查詢
SPOOL OFF           -- 關閉緩衝,寫入檔案

實戰範例:產生 CSV(以逗號分隔)

SET NEWPAGE 0
SET LINESIZE 10000
SET PAGESIZE 0
SET HEADING OFF
SET TRIMSPOOL ON
SET COLSEP ','          -- 欄位分隔符設為逗號
SET ECHO OFF
SET FEEDBACK OFF

SPOOL syoyou_xamshain.csv

SELECT
  SHIMEI_CD,
  VALID_TERM_START_YMD,
  SHAIN_NMJ_SEI,
  SHAIN_NMJ_NA,
  SHAIN_NMHK_SEI,
  SHAIN_NMHK_NA,
  SHAIN_NMHE_SEI,
  SHAIN_NMHE_MIDDLE,
  SHAIN_NMHE_NA,
  SEI_BETSU_KBN,
  NOK00J0001.NOZJ1301(birth_day),
  SAIYOU_YMD,
  KEI_BETSU_CD,
  RETIRE_YMD,
  BANK_CD,
  BANK_NMJ,
  BANK_NMK,
  BANK_SHITEN_CD,
  BANK_SHITEN_NMJ,
  BANK_SHITEN_NMK,
  YOKIN_TYPE,
  KOUZA_MEIGI_KANA,
  NOK00J0001.NOZJ1301(kouza_no),
  SSO_TAISHO_FLG,
  VALID_TERM_END_YMD,
  NEXT_SYSTEM_TAISHO_FLG,
  IDOU_FLG,
  YUUKOU_FLG,
  CREATE_USER_CD,
  CREATE_TIME_STAMP,
  UPDATE_USER_CD,
  UPDATE_TIME_STAMP
FROM xamshain;

SPOOL OFF

關鍵 SET 參數說明

參數作用建議值
LINESIZE單行最大字元數,防止換行截斷10000 或預估最大行長
PAGESIZE頁大小,0 表示不分頁、無標題重複0
TRIMSPOOL移除行尾空白ON
COLSEP欄位分隔符',' 或 ' ' (Tab)
HEADING是否顯示欄位名OFF(純資料) / ON(含表頭)
FEEDBACK是否顯示「已選取 N 行」OFF

進階技巧

  • 大量資料:搭配 SET ARRAYSIZE 5000 減少網路往返。
  • 編碼控制:客戶端 NLS_LANG 需與資料庫字元集一致,避免中文亂碼。
  • 自動化:將上述腳本存為 .sql,用 sqlplus user/pass @script.sql 排程執行。

常見問題

  1. 檔案被截斷 → 增加 LINESIZE、檢查 LONG / LONGCHUNKSIZE 設定。
  2. 欄位對齊錯位 → 確認 COLSEP 未出現在資料中,或改用固定寬度格式(COLSEP '' + RPAD)。
  3. 權限不足 → 確認 Oracle 進程對輸出目錄有寫入權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved