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

Oracle SQL*Plus 命令大全:環境設定、編輯緩衝區、腳本執行與格式化輸出實戰

     編輯:關於SqlServer

SQL*Plus 核心概念

  • SQL:ANSI 標準查詢語言,操作資料庫物件
  • SQL*Plus:Oracle 專屬命令列工具,提供環境控制、報表格式化、腳本管理等擴充功能
  • 關鍵差異:SQL 不可縮寫、可操作資料庫、命令存入緩衝區;SQL*Plus 可縮寫、不直接操作資料庫、命令不存入緩衝區

核心命令分類速查

類別命令 (縮寫)功能範例
緩衝區編輯EDIT (ED)開啟編輯器修改緩衝區 SQLED
RUN (R)執行緩衝區當前 SQLR
SAVE存檔緩衝區至檔案SAVE c:\query.sql
GET載入檔案至緩衝區GET c:\query.sql
@ / START載入並執行腳本檔@c:\script.sql
LIST (L)顯示緩衝區內容L
CLEAR BUFFER清空緩衝區CLEAR BUFFER
DEL刪除緩衝區指定行DEL 3
連線控制CONNECT (CONN)連線/切換用戶CONN user/pass@tns
DISCONNECT (DISC)中斷連線不離開 SQL*PlusDISC
EXIT / QUIT離開 SQL*PlusEXIT
SHOW USER顯示當前用戶SHOW USER
PASSWORD修改密碼PASSWORD
結構查詢DESCRIBE (DESC)顯示表/檢視/函數結構DESC employees
SHOW ALL顯示所有環境設定SHOW ALL
SHOW PARAMETERS顯示初始化參數SHOW PARAMETERS sga
SHOW RECYCLEBIN顯示回收筒SHOW RECYCLEBIN

環境變數設定 (SET/SHOW)

設定命令說明常用值/範例
SET AUTOCOMMIT {ON|OFF|IMMEDIATE|n}自動提交控制SET AUTOCOMMIT OFF (手動 COMMIT)
SET LINESIZE {n}顯示行寬度SET LINESIZE 200 (預設 80/150)
SET PAGESIZE {n}每頁列數 (0=不分頁)SET PAGESIZE 50
SET LONG {n}LONG/CLOB 顯示長度SET LONG 10000
SET LONGCHUNKSIZE {n}LONG 分塊輸出大小SET LONGCHUNKSIZE 1000
SET TRIMSPOOL {ON|OFF}SPOOL 輸出去除尾部空白SET TRIMSPOOL ON
SET TRIMOUT {ON|OFF}螢幕輸出去除尾部空白SET TRIMOUT ON
SET TIMING {ON|OFF}顯示執行耗時SET TIMING ON
SET TIME {ON|OFF}提示符顯示當前時間SET TIME ON
SET FEEDBACK {ON|OFF|n}顯示「n 筆資料已選取」SET FEEDBACK OFF
SET HEADING {ON|OFF}顯示欄位標題SET HEADING OFF (匯出資料用)
SET VERIFY {ON|OFF}顯示替換變數前後值SET VERIFY OFF
SET DEFINE {ON|OFF|c}替換變數前綴字元SET DEFINE OFF (避免 & 衝突)
SET SERVEROUTPUT {ON|OFF} SIZE n啟用 DBMS_OUTPUTSET SERVEROUTPUT ON SIZE 1000000
SET NUMFORMAT "format"數字顯示格式SET NUMFORMAT "999,999.99"
SET COLSEP "sep"欄位分隔符 (SPOOL 用)SET COLSEP ","
SET MARKUP HTML ON輸出 HTML 表格SET MARKUP HTML ON SPOOL ON

輸出重導向與報表產生

SPOOL 命令

SPOOL c:\output\report.txt        -- 開始記錄 (覆蓋)
SPOOL c:\output\report.txt APPEND -- 附加模式
SPOOL c:\output\report.html       -- 搭配 MARKUP HTML
...
SPOOL OFF                         -- 結束記錄

完整報表腳本範例

SET LINESIZE 200 PAGESIZE 50 TRIMSPOOL ON TRIMOUT ON
SET FEEDBACK OFF HEADING ON VERIFY OFF
SET COLSEP ',' MARKUP HTML ON SPOOL ON
SPOOL c:\reports\dept_sal_&_DATE..html

BREAK ON DEPARTMENT_NAME SKIP 1
COMPUTE SUM LABEL '部門總薪' OF SALARY ON DEPARTMENT_NAME
COMPUTE SUM LABEL '公司總薪' OF SALARY ON REPORT

SELECT d.DEPARTMENT_NAME, e.FIRST_NAME || ' ' || e.LAST_NAME AS EMP_NAME,
       e.SALARY
FROM   EMPLOYEES e JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.SALARY DESC;

SPOOL OFF
SET MARKUP HTML OFF

替換變數與腳本參數化

-- 定義變數
DEFINE dept_id = 10
DEFINE start_date = '2024-01-01'

-- 腳本參數 (&1, &2... 對應呼叫時傳入)
-- 查詢腳本 query_dept.sql:
SELECT * FROM employees WHERE department_id = &1 AND hire_date > '&2';

-- 執行
@query_dept.sql 10 '2024-01-01'

-- ACCEPT 互動式輸入
ACCEPT p_dept PROMPT '請輸入部門編號: ' NUMBER
SELECT * FROM employees WHERE department_id = &p_dept;

常用格式化命令 (COLUMN / FORMAT)

COLUMN salary FORMAT 999,999.99 HEADING '月薪'
COLUMN hire_date FORMAT A12 HEADING '到職日'
COLUMN email FORMAT A30 TRUNCATE
COLUMN commission_pct FORMAT 0.99 HEADING '提成%' NULL '(無)'

-- 清除格式
CLEAR COLUMNS

實用技巧與最佳實踐

  1. login.sql / glogin.sql:每次啟動自動執行,預設設定 LINESIZE、PAGESIZE、DATE FORMAT、EDITOR 等
  2. SET SQLPROMPT:自訂提示符,如 SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER> "
  3. SET EDITOR:指定外部編輯器 SET EDITOR "notepad++" 或 "code --wait"
  4. DESC 進階:DESC table_name PARTITION 顯示分區資訊,DESC function_name 顯示函數簽名
  5. 避免 & 衝突:執行含 & 字元腳本前先 SET DEFINE OFF,結束後 SET DEFINE ON
  6. 大量資料匯出:SET HEADING OFF FEEDBACK OFF TRIMSPOOL ON PAGESIZE 0 搭配 SPOOL 產生純資料檔
  7. 錯誤處理:WHENEVER SQLERROR EXIT SQL.SQLCODE / WHENEVER OSERROR EXIT FAILURE 讓腳本失敗時回傳非零代碼,利於 CI/CD 整合

常見問題快速解決

問題解決方案
輸出截斷/換行亂掉SET LINESIZE 32767 TRIMSPOOL ON TRIMOUT ON
中文亂碼確認 NLS_LANG 環境變數、終端機編碼、SET MARKUP HTML ON 指定 charset
DBMS_OUTPUT 無輸出SET SERVEROUTPUT ON SIZE UNLIMITED
腳本執行卡住檢查是否缺少分號/斜線 /、未結束引號、等待鎖定
變數替換錯誤SET DEFINE OFF 或使用 SET ESCAPE \
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved