存儲過程是封裝在資料庫內的 PL/SQL 程式單元,能減少網路往返、重用邏輯、強化安全。本文以 **最小骨架** 為起點,手把手帶你完成建立、編譯、執行、修改、除錯、刪除全流程,工具僅需 Notepad + SQL*Plus。
檔名 skeleton.sql
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
NULL; -- PL/SQL 區塊至少需一句,NULL 佔位
END;
/
CREATE OR REPLACE PROCEDURE skeleton:建立或覆蓋名為 skeleton 的過程。IS:宣告區開始 (無變數可留空)。BEGIN:執行區開始。NULL;:空操作,不可省略。END;:執行區結束。/:SQL*Plus 執行緩衝區指令。SQL> @skeleton
SQL> /
Procedure created.
出現 Procedure created. 代表編譯成功,已存入資料庫字典。
-- 方式 1:EXECUTE 命令
SQL> EXECUTE skeleton;
PL/SQL procedure successfully completed.
-- 方式 2:匿名區塊呼叫
SQL> BEGIN
skeleton;
END;
/
PL/SQL procedure successfully completed.
編輯 skeleton.sql:
CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World!');
END;
/
重新載入:
SQL> @skeleton
SQL> /
Procedure created.
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE skeleton;
Hello World!
PL/SQL procedure successfully completed.
⚠️
SET SERVEROUTPUT ON**必須在執行前開啟**,否則DBMS_OUTPUT內容不會顯示。
-- 故意寫錯
CREATE OR REPLACE PROCEDURE bad_proc IS BEGIN SELECT * FROM dual; END;
/
-- 顯示警告:Procedure created with compilation errors.
-- 查看錯誤詳情
SQL> SHOW ERRORS
ERRORS FOR PROCEDURE BAD_PROC:
LINE/COL ERROR
-------- -------------------------------------------------
3/1 PLS-00428: an INTO clause is expected in this SELECT statement
或查詢字典:
SELECT * FROM user_errors WHERE name = 'BAD_PROC';
DROP PROCEDURE skeleton;
CREATE OR REPLACE PROCEDURE greet (p_name IN VARCHAR2, p_greeting OUT VARCHAR2)
IS
BEGIN
p_greeting := 'Hello, ' || p_name || '!';
END;
/
-- 呼叫
VARIABLE g VARCHAR2(50);
EXECUTE greet('Alice', :g);
PRINT g;
-- Output: Hello, Alice!
CREATE OR REPLACE 避免重複建立報錯。IN (預設)、OUT、IN OUT。EXCEPTION WHEN OTHERS THEN ... 記錄錯誤日誌。PRAGMA AUTONOMOUS_TRANSACTION 僅在獨立交易日誌需求時使用。DBMS_UTILITY.COMPILE_SCHEMA 重編失效物件。從 NULL; 開始,一步步加入參數、邏輯、例外、日誌,即能打造健壯、可維護的 Oracle 存儲過程庫。