SQL*Plus 定位
Oracle 官方命令列工具,支援 SQL 陳述式 (DML/DDL/DCL) 與 SQL*Plus 命令 兩大類指令。前者操作資料、後者控制輸出格式、環境設定、腳本流程,是 DBA 與開發者產出報表、自動化維護的核心工具。
核心命令分類速查
腳本執行與編輯
| 命令 | 功能 | 範例 |
@file.sql / START file.sql | 執行 SQL 腳本檔 | @backup.sql |
EDIT | 以系統編輯器修改緩衝區最後一條 SQL | EDIT |
/ | 重新執行緩衝區最後一條 SQL | / |
GET file / SAVE file | 載入/儲存腳本至緩衝區 | GET report.sql |
輸出導向與報表格式化
| 命令 | 功能 | 關鍵選項 |
SPOOL file / SPOOL OFF | 將螢幕輸出導向檔案 / 關閉 | SPOOL report.lst |
SET PAGESIZE n | 每頁列數 (0=不分頁) | SET PAGESIZE 50 |
SET LINESIZE n | 每行字元寬度 | SET LINESIZE 200 |
SET FEEDBACK ON/OFF | 顯示/隱藏「n rows selected」 | SET FEEDBACK OFF |
SET HEADING ON/OFF | 顯示/隱藏欄位標題 | SET HEADING OFF |
SET ECHO ON/OFF | 腳本執行時是否顯示指令本身 | SET ECHO OFF |
SET TRIMSPOOL ON | 移除 SPOOL 輸出尾部空白 | SET TRIMSPOOL ON |
欄位格式化 (COLUMN / COL)
COLUMN column_name [ALIAS alias] [FORMAT fmt] [HEADING 'text'] [JUSTIFY L|C|R] [WRAPPED|WRAPPED_WORD|TRUNCATED] [NULL 'text'] [NOPRINT|PRINT]
常用範例
-- 修改欄位標題(支援多行,用 | 分隔)
COL ename HEADING 'Employee|Name'
-- 數值格式:千分位、小數 2 位
COL sal FORMAT '99,999.99'
-- 日期格式
COL hiredate FORMAT A12 -- 寬度 12 字元
-- 或搭配 SQL: TO_CHAR(hiredate, 'YYYY-MM-DD')
-- 長字串截斷/換行
COL long_text FORMAT A30 TRUNCATED
COL long_text FORMAT A30 WRAPPED
-- 隱藏欄位 (用於排序/運算不顯示)
COL hidden_col NOPRINT
-- NULL 顯示為指定文字
COL comm NULL '(null)'
斷點報表 (BREAK / COMPUTE)
-- 依部門分組,顯示小計
BREAK ON deptno SKIP 1
COMPUTE SUM LABEL 'Dept Total' OF sal ON deptno
COMPUTE SUM LABEL 'Grand Total' OF sal ON REPORT
SELECT deptno, ename, sal FROM emp ORDER BY deptno, ename;
環境變數與替換變數
DEFINE var = value / UNDEFINE var:定義/移除替換變數。
&var / &&var:執行時提示輸入 / 重複使用同一值。
SET DEFINE OFF:關閉替換變數解析 (避免 & 被誤判)。
資料庫物件資訊查詢
| 命令 | 功能 |
DESC[RIBE] table_view | 顯示資料表/視圖結構 (欄位、型別、可空性) |
SHOW PARAMETERS | 顯示初始化參數 |
SHOW USER | 顯示目前連線使用者 |
SHOW ERRORS [proc|func|pkg|trig] | 顯示編譯錯誤 |
實務報表腳本範本
SET ECHO OFF FEEDBACK OFF HEADING ON PAGESIZE 60 LINESIZE 180 TRIMSPOOL ON
SET COLSEP ' | '
COL empno FORMAT 9999 HEADING 'Emp No'
COL ename FORMAT A15 HEADING 'Name'
COL job FORMAT A12 HEADING 'Job'
COL sal FORMAT '99,999.99' HEADING 'Salary'
COL comm FORMAT '99,999.99' HEADING 'Comm' NULL '(none)'
BREAK ON deptno SKIP 1
COMPUTE SUM LABEL 'Dept Sum' OF sal ON deptno
COMPUTE SUM LABEL 'Total' OF sal ON REPORT
SPOOL emp_report.lst
SELECT deptno, empno, ename, job, sal, comm
FROM emp
ORDER BY deptno, ename;
SPOOL OFF
結語
熟練掌握 SQL*Plus 格式化命令,能快速產出對齊美觀、含小計總計的文字報表,無需外部工具即可滿足大多數臨時查詢與定期匯出需求。