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

SQL*Plus 輸出 Excel/HTML 完美方案:雙腳本架構消除 Spool 冗餘

     編輯:Oracle 資料庫基礎

核心痛點

直接 SPOOL file.xls 會包含 SQL*Plus 標題、提示符、執行回饋等冗餘資訊,導致匯入 Excel 需人工清理。

解決方案:主腳本 + 功能腳本分離

利用 SET MARKUP HTML ON 產生標準 HTML 表格,副檔名命名為 .xls,Excel 可直接開啟並正確識別表格結構。

實戰腳本

1. 主控腳本 (main.sql)

SET LINESIZE 200
SET TERMOUT OFF
SET VERIFY OFF
SET FEEDBACK OFF
SET PAGESIZE 999
SET MARKUP HTML ON ENTMAP ON SPOOL ON PREFORMAT OFF
SPOOL tables.xls
@get_tables.sql
SPOOL OFF
EXIT

關鍵參數解析:

  • TERMOUT OFF:抑制終端輸出
  • VERIFY OFF:隱藏變數替換過程
  • FEEDBACK OFF:隱藏「X rows selected.」
  • PAGESIZE 999:避免分頁標題重複
  • MARKUP HTML ON:啟用 HTML 表格輸出
  • ENTMAP ON:特殊字符 HTML 轉義
  • SPOOL ON:將 SPOOL 內容納入 HTML 包裝
  • PREFORMAT OFF:不使用 <PRE> 標籤,生成純 <TABLE>

2. 功能腳本 (get_tables.sql)

SELECT owner, table_name, tablespace_name, blocks, last_analyzed
FROM all_tables
ORDER BY 1, 2;

3. 執行與驗證

$ sqlplus "/ as sysdba" @main.sql
$ ls -l tables.xls
-rw-r--r-- 1 oracle dba 69539 Apr 25 10:30 tables.xls

雙擊 .xls 即可在 Excel 中看到乾淨的表格,無冗餘行、無亂碼。

進階技巧

  1. 自定義欄位標題:在查詢中使用別名 SELECT owner AS "Schema Owner" ...
  2. 日期格式控制:ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
  3. 大數據量優化:SET ARRAYSIZE 5000 減少網路往返
  4. 純 CSV 輸出:改用 SET COLSEP ',' + SET MARKUP HTML OFF 配合 SPOOL file.csv

原理總結

雙腳本架構 將環境設定與業務邏輯分離,MARKUP HTML 產生標準化表格結構,Excel 原生支援 HTML 表格匯入,實現「零清理、直開即用」的完美體驗。

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