前言:SQL*Plus 命令 vs SQL 敘述
SQL*Plus 是 Oracle 官方命令列客戶端。兩類指令易混淆:
- SQL 敘述(DML/DDL/DCL):操作資料與結構,執行後存入 SQL Buffer(僅保留最近一條),可編輯重跑。
- SQL*Plus 命令:格式化輸出、環境設定、檔案操作,不進入 SQL Buffer,專為報表產出與工具控制設計。
核心命令分類速查
1. 腳本執行與編輯
| 命令 | 用途 | 範例 |
@file / START file | 執行腳本檔 | @ c:\scripts\init.sql |
@@file | 腳本中呼叫同目錄腳本 | 主腳本含 @@common.sql |
EDIT | 啟動編輯器修改 SQL Buffer 內容 | |
/ / RUN | 重跑 SQL Buffer 最後一條 | |
SAVE file / GET file | Buffer 存檔/讀檔 | |
2. 輸出導向與報表格式化
| 命令 | 用途 | 關鍵子句 |
SPOOL file / SPOOL OFF | 螢幕輸出導向檔案 | 必配 SET TERMOUT OFF 提速 |
COLUMN (COL) | 欄位顯示格式化 | FORMAT, HEADING, JUSTIFY, NOPRINT, WRAPPED |
BREAK ON col SKIP n | 分組斷行、插入空行 | CLEAR BREAKS 取消 |
TTITLE / BTITLE | 頁首/頁尾標題 | |
SET MARKUP HTML ON | 輸出 HTML 表格 | 搭配 SPOOL report.html |
3. 環境變數控制(SET 命令精選)
SET LINESIZE 200 -- 單行寬度,防換行
SET PAGESIZE 50 -- 頁長(0 為不分頁)
SET FEEDBACK ON -- 顯示影響行數
SET HEADING ON -- 顯示欄標
SET NULL '(null)' -- NULL 顯示字串
SET SERVEROUTPUT ON SIZE 100000 FORMAT WRAPPED -- 啟用 DBMS_OUTPUT
SET TIMING ON -- 顯示執行耗時
SET SQLBLANKLINES ON -- 允許 SQL 內含空行
SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS -- 執行計畫+統計
SET TRIMSPOOL ON -- 移除 SPOOL 檔行尾空白
SET TERMOUT OFF -- 關閉螢幕輸出(大量 SPOOL 必備)
4. Buffer 編輯微操作
| 命令 | 說明 |
L [n] | 列出 Buffer(可指定行) |
C /old/new | 當前行首次出現字串替換 |
I / A text | 當前行下插入/當前行尾附加 |
DEL [n] | 刪除當前行或指定行 |
5. 變數與綁定變數
- 使用者變數:
DEFINE var=value 或 COLUMN col NEW_VALUE var,引用 &var(每次提示)或 &&var(僅首次提示)。
- 綁定變數:
VARIABLE bind_var NUMBER,PL/SQL 區塊內用 :bind_var 參照,PRINT bind_var 顯示值。
6. 實用進階技巧
- # 逃逸鍵:輸入 SQL 途中輸入
#cmd 可暫執行 SQL*Plus 命令(如 #DESC emp 查結構),不中斷當前語句。
- 快速複製貼上:滑鼠選取 → 左鍵按住 → 右鍵點擊 → 內容自動貼至命令列末行。
HOST / !:暫離 SQL*Plus 執行 OS 命令(Windows 僅支援 HOST)。
COPY FROM ... TO ... CREATE table USING query:跨資料庫直接複製表資料。
常用查詢視圖速查
SELECT * FROM TAB; -- 當前使用者所有表/視圖
SELECT * FROM USER_OBJECTS; -- 所有物件明細
SELECT * FROM USER_TABLES; -- 所有表
SELECT * FROM USER_INDEXES; -- 所有索引
總結
熟練 SQL*Plus 命令,能讓 DBA 與開發者在無 GUI 環境下高效完成報表產出、腳本自動化、效能分析與跨庫資料遷移。建議將常用 SET 參數寫入 glogin.sql 或 login.sql 實現登入即時生效。