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

Oracle SQL*Plus SPOOL 命令詳解:查詢結果導出文件與打印

     編輯:Oracle 教學

Oracle SQL*Plus SPOOL 命令詳解:查詢結果導出文件與打印

SPOOL 命令將 SQL*Plus 會話輸出 (查詢結果、執行計劃、報錯信息) 重定向到操作系統文件,或直接發送到打印機。

語法


SPOOL [file_name [CREATE | REPLACE | APPEND]] | OFF | OUT
選項說明
file_name目標文件路徑 (含副檔名 .lst/.txt/.csv)
CREATE創建新文件,文件存在則報錯 (默認行為)
REPLACE覆蓋現有文件 (最常用)
APPEND追加到文件末尾
OFF停止記錄,關閉文件句柄
OUT發送到打印機 (需 OS 打印隊列配置)

實戰演示

1. 基礎導出 (REPLACE 模式)


SQL> SPOOL E:\query_result.lst REPLACE
SQL> SELECT * FROM dept;
SQL> SPOOL OFF

生成文件 E:\query_result.lst 內容:


SELECT * FROM dept

DEPTNO DNAME          LOC
---------- -------------- -------------
10      ACCOUNTING     NEW YORK
20      RESEARCH       DALLAS
30      SALES          CHICAGO
40      OPERATIONS     BOSTON

特點:文件包含 **執行的 SQL 語句 + 查詢結果**,便於審計與複現。

2. 追加模式 (APPEND) 累積多次查詢


SQL> SPOOL E:\daily_report.lst APPEND
SQL> SELECT SYSDATE FROM dual;
SQL> SPOOL OFF
-- 多次執行,結果依次追加

3. 結合 SET 命令優化輸出格式


SET LINESIZE 200
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON
SET COLSEP ','

SPOOL E:\dept_export.csv REPLACE
SELECT deptno, dname, loc FROM dept;
SPOOL OFF

生成無標題、CSV 格式,可直接導入 Excel/ETL 工具。

4. 導出執行計劃


SET AUTOTRACE TRACEONLY EXPLAIN
SPOOL E:\plan.lst
SELECT * FROM emp WHERE deptno = 10;
SPOOL OFF

常見問題與技巧

  • 路徑含空格:用雙引號包裹 SPOOL "E:\My Reports\rpt.lst"
  • 大文件性能:SET TRIMSPOOL ON 去除行尾空格,減小文件體積。
  • 中文亂碼:確保 NLS_LANG 與客戶端編碼一致 (如 AMERICAN_AMERICA.ZHS16GBK 或 AL32UTF8),或用 SET MARKUP HTML ON 生成 HTML 避免編碼問題。
  • 自動命名:SPOOL report_&_DATE._&_TIME..lst 利用 SQL*Plus 替換變量生成帶時間戳文件名。

SPOOL vs UTL_FILE vs EXTERNAL TABLE

方式執行端適用場景權限需求
SPOOL客戶端交互式導出、報表、腳本日志客戶端寫權限
UTL_FILE服務端PL/SQL 批量寫文件、定時任務DIRECTORY 對象權限
EXTERNAL TABLE服務端大數據量高性能導出 (ORACLE_DATAPUMP/LOADER)DIRECTORY + CREATE TABLE

總結

SPOOL 是 SQL*Plus 最實用的輸出重定向命令,**記住 SPOOL OFF 關閉文件**,否則後續輸出會持續寫入導致文件暴漲。生產環境批量導出優先考慮服務端 UTL_FILE 或 Data Pump。

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