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

Oracle 預存程序開發完整教學:建立、執行、修改、除錯、刪除六大步驟實戰

     編輯:Oracle 資料庫基礎

從零開始掌握 Oracle PL/SQL 預存程序開發全流程。本文以最小化骨架程序為例,涵蓋環境準備、建立、執行、修改、除錯、刪除六大步驟,並說明 DBMS_OUTPUT、SET SERVEROUTPUT、編譯錯誤定位等核心技巧。

環境準備

  • 文字編輯器:Notepad / Notepad++ / VS Code / SQL Developer
  • Oracle SQL*Plus 或 SQLcl(命令列介面)
  • Oracle Database 10g XE / 11g XE / 18c XE / 21c XE(免費版)
  • 基礎 SQL 與 PL/SQL 語法概念

步驟 1:編寫骨架程序(無副作用)

檔案 skeleton.sql:

CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
  NULL;  -- PL/SQL 區塊至少需一條語句
END skeleton;
/
-- 逐行解析:
-- 1 CREATE OR REPLACE PROCEDURE skeleton  -- 建立或覆蓋
-- 2 IS                                    -- 宣告區開始
-- 3 BEGIN                                 -- 執行區開始
-- 4 NULL;                                 -- 空操作
-- 5 END skeleton;                         -- 結束
-- 6 /                                     -- SQL*Plus 執行緩衝區

步驟 2:建立程序

SQL> @skeleton
SQL> /
Procedure created.

步驟 3:執行程序

-- 方式一:EXECUTE 命令
SQL> EXECUTE skeleton;
PL/SQL procedure successfully completed.

-- 方式二:匿名區塊呼叫
SQL> BEGIN
  2   skeleton;
  3  END;
  4  /
PL/SQL procedure successfully completed.

步驟 4:修改程序(加入輸出)

編輯 skeleton.sql:

CREATE OR REPLACE PROCEDURE skeleton
IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello World!');
END skeleton;
/
-- 重新建立
SQL> @skeleton
SQL> /
Procedure created.

步驟 5:啟用輸出並再次執行

SQL> SET SERVEROUTPUT ON
SQL> EXECUTE skeleton;
Hello World!
PL/SQL procedure successfully completed.

關鍵:SET SERVEROUTPUT ON 必須在呼叫 DBMS_OUTPUT.PUT_LINE 之前執行,否則輸出不顯示。

步驟 6:除錯編譯錯誤

-- 故意製造錯誤
CREATE OR REPLACE PROCEDURE bad_proc IS
BEGIN
  SELECT * FROM non_exist_table;  -- 表不存在
END;
/

-- SQL*Plus 回應:
Warning: Procedure created with compilation errors.

-- 查看錯誤
SQL> SHOW ERRORS
Errors for PROCEDURE BAD_PROC:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/3      PL/SQL: SQL Statement ignored
3/15     PL/SQL: ORA-00942: table or view does not exist

-- 或查詢視圖
SELECT * FROM user_errors WHERE name = 'BAD_PROC' ORDER BY sequence;

除錯循環:修改檔案 → @檔案 → / → SHOW ERRORS → 依錯誤行號定位 → 重複。

步驟 7:刪除程序

SQL> DROP PROCEDURE skeleton;
Procedure dropped.

屬 DDL 語句,隱含提交,不可回滾。

進階開發技巧

技巧說明
參數錨定p_empno IN emp.empno%TYPE 防止 DDL 變更導致程式失效
區域變數宣告區使用 v_ 前綴,避免與欄位名衝突
游標 FOR 迴圈FOR r IN (SELECT ...) LOOP ... END LOOP; 隱式開關游標
大量綁定FORALL i IN 1..v_cnt INSERT ... VALUES (v_arr(i)) 批次 DML
自主交易PRAGMA AUTONOMOUS_TRANSACTION; 記錄日誌不受主交易回滾影響
編譯警告ALTER SESSION SET PLSQL_WARNINGS='ENABLE:ALL'; 捕獲潛在問題

商用開發流程建議

  1. 需求分析 → 介面設計(參數、回傳、異常碼)。
  2. 編寫測試案例(正常、邊界、異常)。
  3. 開發 → 單元測試 → 程式碼評審 → 部署腳本產生。
  4. 部署:@deploy_procs.sql 含 CREATE OR REPLACE、GRANT EXECUTE、SYNONYM。
  5. 上線後監控 DBA_OBJECTS.LAST_DDL_TIME、V$SQL 執行統計。

掌握「編寫 → @建立 → EXECUTE → SET SERVEROUTPUT → SHOW ERRORS → DROP」標準循環,配合現代 IDE(SQL Developer、VS Code + Oracle Developer Tools)斷點除錯、單元測試框架,即能高效交付高品質 PL/SQL 程式單元。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved