需要用 SQL*Plus 將查詢結果以純數據形式(無標題、無頁腳、無回饋)導出到 CSV 或文本文件?本文提供一份經過驗證的完整腳本模板,並逐行解釋關鍵設置參數的作用。
-- 每行最大字符數(上限 999)
SET LINESIZE 800
-- 頁大小設為 0,抑制分頁、標題、底標題、空行
SET PAGESIZE 0
-- 列格式按需設置(示例)
-- COL username FORMAT A4
-- COL a FORMAT 999,999,999
-- 關閉列標題顯示
SET HEADING OFF
-- 關閉「N rows selected」等回饋信息
SET FEEDBACK OFF
-- 關閉命令回顯
SET ECHO OFF
-- 關閉終端輸出(僅寫入 SPOOL 文件)
SET TERMOUT OFF
-- 去除多餘空格(配合 LINESIZE 過長時)
SET TRIMOUT ON
SET TRIMSPOOL ON
-- 開始導出
SPOOL e:\output\scott_spool_emp.csv
-- 實際查詢:用 || 拼接字段,模擬 CSV 格式
SELECT EMPNO || ',' || ENAME || ',' || JOB || ',' || MGR || ',' || HIREDATE || ',' || SAL FROM EMP;
-- 結束導出
SPOOL OFF
| 參數 | 作用 | 建議值 |
|---|---|---|
| LINESIZE | 單行最大字符數,防止換行截斷 | 根據最寬行估算,如 800~32000 |
| PAGESIZE | 每頁行數,0 表示不分頁 | 0 |
| HEADING | 是否顯示列標題 | OFF |
| FEEDBACK | 是否顯示執行反饋 | OFF |
| ECHO | 腳本命令是否在屏幕回顯 | OFF |
| TERMOUT | 查詢結果是否輸出到終端 | OFF |
| TRIMOUT / TRIMSPOOL | 去除行尾空格 | ON |
_DATE、_USER 等變量生成帶時間戳的文件名。REPLACE 雙引號並包裹雙引號,或改用 Python/csvkit 等工具後處理。SET ARRAYSIZE、SET LONG 優化網絡傳輸。SPOOL 路徑寫權限、查詢是否真有結果。PAGESIZE 0、TRIMSPOOL ON 是否生效。NLS_LANG 與數據庫字符集一致(如 AMERICAN_AMERICA.ZHS16GBK 或 AL32UTF8)。掌握這套標準化腳本,即可在任何 Oracle 環境下快速、乾淨地導出純數據文件,滿足 ETL、報表、歸檔等場景需求。