SQL> EXECUTE skeleton;
PL/SQL procedure successfully completed.
SQL> BEGIN
2 skeleton;
3 END;
4 /
PL/SQL procedure successfully completed.
編輯腳本文件 skeleton.sql:
CREATE OR REPLACE PROCEDURE skeleton IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
END skeleton;
/
重新執行:
SQL> @skeleton
SQL> /
Procedure created.
默認關閉,必須顯式開啟:
SQL> SET SERVEROUTPUT ON
-- 或指定緩衝區大小(默認 20000,最大 1000000)
SQL> SET SERVEROUTPUT ON SIZE 100000
再次執行:
SQL> EXECUTE skeleton;
Hello World!
PL/SQL procedure successfully completed.
SHOW ERRORS:顯示最近創建對象的錯誤。SELECT * FROM user_errors WHERE name = 'PROC_NAME' ORDER BY sequence;:查詢具體對象錯誤詳情(行號、位置、文本)。| 技術 | 用法 | 適用場景 |
|---|---|---|
DBMS_OUTPUT.PUT_LINE | 打印變量值、執行路徑標記 | 簡單邏輯、循環計數、條件分支驗證 |
DBMS_DEBUG / DBMS_DEBUG_JDWP | 斷點、單步、變量監視(需 IDE 支援:SQL Developer、PL/SQL Developer、TOAD) | 複雜邏輯、多層嵌套、性能熱點分析 |
| 自定義日誌表 | INSERT INTO debug_log(proc, step, msg, ts) VALUES (...); + AUTONOMOUS_TRANSACTION 提交 | 生產環境無 IDE、長事務、異步排查 |
| SQL Trace / TKPROF | ALTER SESSION SET SQL_TRACE=TRUE; → tkprof 分析 | SQL 執行計劃、等待事件、綁定變量窺探 |
| PL/SQL Profiler | DBMS_PROFILER.START_PROFILER → 運行 → STOP_PROFILER → 查詢 plsql_profiler_data | PL/SQL 代碼級性能分析(行級耗時、調用次數) |
DBMS_PROFILER 或 SQL Trace 定位慢 SQL/熱點行。DBMS_OUTPUT 或日誌表記錄關鍵變量狀態。CREATE OR REPLACE → 回歸測試。SQL> DROP PROCEDURE skeleton;
Procedure dropped.
DROP PACKAGE package_name; 或 DROP PACKAGE BODY package_name;(保留規格)。| 階段 | 關鍵動作 | 工具/命令 |
|---|---|---|
| 創建 | 編寫 .sql、版本控制、CREATE OR REPLACE | 編輯器、Git、SQL*Plus |
| 部署 | @script、驗證 Procedure created. | SQL*Plus、SQL Developer、CI/CD |
| 運行 | EXECUTE / 匿名塊、SET SERVEROUTPUT ON | SQL*Plus、應用調用 |
| 修改 | 編輯 .sql、重新 @script、回歸測試 | 編輯器、測試腳本 |
| 調試 | SHOW ERRORS、DBMS_OUTPUT、Profiler、Trace、日誌表 | IDE、SQL*Plus、TKPROF |
| 刪除 | DROP PROCEDURE、清理依賴 | SQL*Plus |
存儲過程的「寫對」只是起點,「跑通」才是目標,「可觀測、可調試、可維護」才是專業標誌。掌握 SET SERVEROUTPUT ON 顯示控制、USER_ERRORS 編譯錯誤查詢、DBMS_PROFILER/SQL_TRACE 性能剖析、自定義日誌表生產排查,構建從開發到運維的完整工具鏈,讓每一個存儲過程在生產環境中都「心裡有數、手裡有據」。