首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

SQL*Plus 格式化輸出實戰大全:SET 命令參數、SPOOL 導出、自動化腳本範例

     編輯:Oracle 資料庫基礎

SQL*Plus 是 Oracle 最高頻使用的命令列工具,但其輸出格式預設多為人眼閱讀設計,直接導出給程式處理常遭遇欄位對齊、分頁符、標題行、回饋訊息干擾。本文系統整理 SET 格式化參數、SPOOL 導出最佳實踐、自動化導出腳本範例,讓輸出乾淨、可解析、可直餵 ETL/報表。

核心 SET 格式化參數速查表

命令預設值建議導出值作用
SET COLSEP '|'單空格'|' 或 ','欄位分隔符,便於 CSV/程式解析
SET NEWPAGE NONE1 (每頁空一行)NONE取消分頁空行,輸出連續行
SET ECHO OFFONOFF不顯示腳本內 SQL 命令本身
SET FEEDBACK OFFON (6 行以上顯示)OFF隱藏 "已選擇 N 行" 訊息
SET HEADING OFFONOFF隱藏欄位標題行,純數據
SET PAGESIZE 0240禁用分頁,無標題重複、無換頁符
SET LINESIZE 100080/150足夠大 (如 1000/32767)防止長行截斷換行
SET NUMWIDTH 1510依精度調整數值欄位顯示寬度
SET TERMOUT OFFONOFF (SPOOL 時)不在終端顯示輸出,加速導出
SET TRIMOUT ONOFFON去除標準輸出行尾空格
SET TRIMSPOOL ONOFFON去除 SPOOL 檔案行尾空格 (關鍵)
SET SERVEROUTPUT ONOFFON啟用 DBMS_OUTPUT 顯示
SET TIMING ONOFF視需求顯示語句執行耗時
SET AUTOTRACE ONOFF調優時顯示執行計畫與統計
SET VERIFY OFFONOFF關閉新舊值確認提示 (含替換變數時)
SET HEADSEP OFFON (|)OFF禁用標題分隔符換行
SET SQLBLANKLINES OFFOFFOFF不保留 SQL 空行

標準化導出腳本範例 (sp.sql)

SET HEAD OFF
SET HEADSEP OFF
SET NEWPAGE NONE
SET LINESIZE 1000
SET PAGESIZE 0
SET SQLBLANKLINES OFF
SET TRIMSPOOL ON
SET TERMOUT OFF
SET FEEDBACK OFF
SET COLSEP '&'   -- 欄位分隔符用 & (URL 安全) 或 |、,

SPOOL d:\export.txt

SELECT nodecode || '&' || nodetype || '&' || nodename || '&'
FROM "000".tbnode;

SPOOL OFF
EXIT

執行方式: sqlplus /nolog @d:\sp.sql (Windows) 或 sqlplus -s /nolog @sp.sql (Linux, -s 靜默模式進一步抑制 Banner)。

進階技巧

  1. 動態生成導出腳本: 用 SQL 查詢 USER_TABLES,拼接每表 SELECT ... + SPOOL,實現全 Schema 自動導出。
  2. 處理 CLOB/BLOB: SQL*Plus 直接 SELECT 大物件會截斷/亂碼。需用 PL/SQL 迴圈 DBMS_LOB.SUBSTR 分塊輸出,或改用 Python/cx_Oracle、Java/JDBC、Data Pump 導出。
  3. 編碼一致性: 客戶端 NLS_LANG 需與資料庫字符集匹配 (如 AMERICAN_AMERICA.ZHS16GBK 或 .AL32UTF8),避免中文亂碼。
  4. 並行導出: 將大表拆分多腳本 (按分區/ROWID 範圍) 同時跑,再合併檔案。
  5. Data Pump 替代: 10g+ 環境 expdp/impdp 並行、壓縮、網路模式、細粒度過濾全面優於 SQL*Plus 文本導出。

常見坑對策

FEEDBACK ON
現象原因修正
輸出含 "已選擇 1000 行"SET FEEDBACK OFF
每 24 行重複標題PAGESIZE 24SET PAGESIZE 0
行尾大量空格TRIMSPOOL OFFSET TRIMSPOOL ON
長行截斷換行LINESIZE 過小SET LINESIZE 32767
欄位擠在一起COLSEP 為空格SET COLSEP '|'
中文亂碼NLS_LANG 不匹配設置正確 NLS_LANG

結語

SQL*Plus 格式化輸出,核心在於 關閉所有「人眼友好」預設 (標題、分頁、回饋、驗證)、開啟所有「機器友好」屬性 (無分頁、無空格、固定分隔符、大行寬)。將上述 SET 組合封裝為標準腳本模板,納入團隊規範,所有導出任務一致、乾淨、可靠,不再為格式清洗浪費工程師寶貴時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved