核心命令速查
| 命令 | 用途 | 範例 |
| @ / START | 執行腳本檔 | @build_schema.sql |
| EDIT | 編輯緩衝區 SQL | EDIT |
| / | 重執行緩衝區 SQL | / |
| SPOOL | 輸出導向檔案 | SPOOL report.lst / SPOOL OFF |
| DESC | 顯示表結構 | DESC employees |
| COLUMN (COL) | 格式化欄位顯示 | COL salary FORMAT $99,999 |
| BREAK | 分組抑制重複值 | BREAK ON deptno SKIP 1 |
| COMPUTE | 分組統計 | COMPUTE SUM OF sal ON deptno |
| SET | 環境設定 | SET LINESIZE 200 PAGESIZE 50 |
| SHOW | 顯示設定 | SHOW ALL |
| DEFINE | 定義變數 | DEFINE dept=10 |
| ACCEPT | 互動輸入變數 | ACCEPT d PROMPT 'Dept: ' |
COLUMN 格式化深度應用
標題與對齊
COL ename HEADING 'Employee|Name' JUSTIFY CENTER
COL sal HEADING 'Monthly|Salary' JUSTIFY RIGHT
數值格式
COL sal FORMAT $99,999.99
COL bonus FORMAT 999,990.00
COL pct FORMAT 99.99
NULL 顯示
COL comm NULL ''
長文字換行
COL notes FORMAT A30 WRAPPED
COL notes FORMAT A30 WORD_WRAPPED
COL notes FORMAT A30 TRUNCATED
條件格式 (12c+)
COL status FOR A10
COL status CLEAR
報表生成實戰範本
SET ECHO OFF FEEDBACK OFF VERIFY OFF HEADING ON
SET LINESIZE 200 PAGESIZE 60 TRIMSPOOL ON
SET UNDERLINE =
COL deptno HEADING 'Dept' FORMAT 999
COL dname HEADING 'Department' FORMAT A20
COL emp_cnt HEADING 'Employees' FORMAT 9,999
COL avg_sal HEADING 'Avg Salary' FORMAT $99,999.99
BREAK ON REPORT
COMPUTE SUM LABEL 'TOTAL' OF emp_cnt ON REPORT
COMPUTE AVG LABEL 'AVG' OF avg_sal ON REPORT
SPOOL dept_summary.lst
SELECT d.deptno, d.dname,
COUNT(e.empno) emp_cnt,
AVG(e.sal) avg_sal
FROM dept d LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY d.deptno, d.dname
ORDER BY d.deptno;
SPOOL OFF
HTML/CSV/JSON 輸出 (12c+)
-- HTML
SET MARKUP HTML ON SPOOL ON
SPOOL report.html
SELECT * FROM emp;
SPOOL OFF
-- CSV
SET COLSEP ',' PAGESIZE 0 FEEDBACK OFF
SPOOL data.csv
SELECT * FROM emp;
SPOOL OFF
-- JSON (19c+)
SET FEEDBACK OFF
SELECT JSON_ARRAYAGG(JSON_OBJECT(*)) FROM emp;
變數與腳本參數化
-- 定義
DEFINE target_dept = 10
-- 或互動
ACCEPT target_dept NUMBER PROMPT 'Enter Dept: ' DEFAULT 10
-- 使用
SELECT * FROM emp WHERE deptno = &target_dept;
-- 傳參執行
@query.sql 10 20
-- 腳本內用 &1 &2 接收
自動化最佳實踐
glogin.sql / login.sql 設定預設環境
- 腳本開頭
WHENEVER SQLERROR EXIT SQL.SQLCODE 錯誤即停
- 使用
SET SERVEROUTPUT ON SIZE UNLIMITED 顯示 DBMS_OUTPUT
- 長時間腳本加
SET TIMING ON 監控效能
- 生產環境腳本必須
SPOOL 完整日誌留存