基本語法
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 排程執行。
常見問題
- 檔案被截斷 → 增加
LINESIZE、檢查 LONG / LONGCHUNKSIZE 設定。
- 欄位對齊錯位 → 確認
COLSEP 未出現在資料中,或改用固定寬度格式(COLSEP '' + RPAD)。
- 權限不足 → 確認 Oracle 進程對輸出目錄有寫入權限。