常用格式化與報表命令
| 命令 | 用途 | 範例 |
REMARK / -- / /* */ | 註釋 | REM This is a comment |
SET HEADSEP | 標題分隔符 | SET HEADSEP ! → TTITLE 'Line1!Line2' |
TTITLE | 頁首標題 | TTITLE 'Sales Report' |
BTITLE | 頁尾標題 | BTITLE 'Confidential' |
COLUMN | 欄位格式/標題/換行 | COL sal FORMAT $99,999 HEADING 'Salary' |
BREAK ON | 分組換行/小計 | BREAK ON deptno SKIP 1 ON REPORT |
COMPUTE SUM | 小計/總計 | COMPUTE SUM OF sal ON deptno |
SET LINESIZE | 行寬 | SET LINESIZE 120 |
SET PAGESIZE | 頁長(行數) | SET PAGESIZE 50 |
SET NEWPAGE | 頁間空行 | SET NEWPAGE 0 (無空行) |
SPOOL | 輸出導向檔案 | SPOOL report.lst ... SPOOL OFF |
SET PAUSE ON | 分頁暫停 | 按 Enter 翻頁 |
SAVE | 存檔當前緩衝區 SQL | SAVE myquery.sql |
HOST / ! | 執行 OS 命令 | HOST ls -l |
START / @ | 執行腳本檔 | @myscript.sql |
EDIT | 啟動外部編輯器 | 需先 DEFINE _EDITOR=vi |
EXIT / QUIT | 離開 SQL*Plus | |
完整報表腳本範例
-- activity.sql : 圖書借閱統計報表
SET HEADSEP !
TTITLE 'Checkout Log for 1/1/02-3/31/02'
BTITLE 'from the Bookshelf'
COLUMN Name FORMAT A20
COLUMN Title FORMAT A20 WORD_WRAPPED
COLUMN DaysOut FORMAT 999.99 HEADING 'Days!Out'
BREAK ON Name SKIP 1 ON REPORT
COMPUTE AVG OF DaysOut ON Name
COMPUTE AVG OF DaysOut ON REPORT
SET LINESIZE 100
SET PAGESIZE 60
SET NEWPAGE 0
SET FEEDBACK OFF
SPOOL activity.lst
SELECT
Name,
Title,
CheckoutDate,
ReturnedDate,
ReturnedDate - CheckoutDate AS DaysOut /* Count Days */
FROM BOOKSHELF_CHECKOUT
ORDER BY Name, CheckoutDate;
SPOOL OFF
輸出效果說明
- 依
Name 分組,組間空一行
- 每組顯示平均借閱天數
- 報表末尾顯示整體平均
- 標題分兩行顯示(
HEADSEP !)
- 結果直接寫入
activity.lst 供列印/歸檔
進階技巧
COLUMN ... NEW_VALUE var 將查詢結果存入變數,供後續標題/條件使用
SET AUTOTRACE ON 顯示執行計畫與統計
SET TIMING ON 顯示執行耗時
- 登入腳本
glogin.sql / login.sql 自動套用常用設定