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

Oracle 存儲過程開發入門:從環境搭建、編寫骨架到編譯部署全流程詳解

     編輯:Oracle 資料庫基礎

目標讀者與前置技能

  • 會寫基本 SQL(SELECT/INSERT/UPDATE/DELETE)。
  • 會使用 SQL*Plus 或 SQL Developer 連接數據庫。
  • 理解 PL/SQL 塊結構(DECLARE/BEGIN/EXCEPTION/END)。

一、開發環境準備

工具用途備註
文本編輯器編寫 .sql 腳本Notepad++、VS Code、Sublime Text,支援語法高亮
SQL*Plus命令行執行腳本、交互調試Oracle Client 自帶,輕量、標準
Oracle 10g XE / 11g XE / 21c Free免費開發數據庫本地安裝或 Docker 運行

二、編寫第一個「空」存儲過程(骨架)

創建 skeleton.sql:

CREATE OR REPLACE PROCEDURE skeleton IS
BEGIN
  NULL;  -- PL/SQL 塊至少需一條語句,NULL 為無操作佔位
END skeleton;
/

逐行解析:

  1. CREATE OR REPLACE PROCEDURE skeleton:創建或替換名為 skeleton 的過程,OR REPLACE 避免「已存在」報錯。
  2. IS:聲明區開始(等同 AS)。
  3. BEGIN:可執行區開始。
  4. NULL;:空語句,滿足語法要求。
  5. END skeleton;:結束標記,可選重複名稱增強可讀性。
  6. /:SQL*Plus 專用執行終結符,單獨一行。

三、在數據庫中創建(編譯部署)

  1. 啟動 SQL*Plus 並連接:sqlplus scott/tiger@orcl 或 sqlplus / as sysdba。
  2. 執行腳本:
    SQL> @skeleton.sql
    SQL> /
  3. 成功提示:Procedure created.

四、運行存儲過程

方式 1:EXECUTE 命令

SQL> EXECUTE skeleton;
PL/SQL procedure successfully completed.

方式 2:匿名 PL/SQL 塊調用

SQL> BEGIN
  2    skeleton;
  3  END;
  4  /
PL/SQL procedure successfully completed.

五、修改存儲過程:輸出 "Hello World!"

  1. 編輯 skeleton.sql,替換 NULL;:
CREATE OR REPLACE PROCEDURE skeleton IS
BEGIN
  DBMS_OUTPUT.PUT_LINE('Hello World!');
END skeleton;
/
  1. 重新執行腳本(@skeleton.sql + /),提示 Procedure created.。
  2. 開啟輸出緩衝:SQL> SET SERVEROUTPUT ON(否則不顯示)。
  3. 再次執行:EXECUTE skeleton; → 輸出 Hello World!。

六、調試存儲過程:編譯錯誤定位與修正

實際商業過程包含多表連接、遊標循環、條件分支、動態 SQL,編譯錯誤常見類型:

錯誤類型典型原因定位方法
PLS-00103: Encountered symbol ...語法錯誤(少分號、關鍵字拼寫、括號不匹配)SHOW ERRORS 或 SELECT * FROM user_errors WHERE name='SKELETON';
PL/SQL: ORA-00942: table or view does not exist引用對象不存在或權限不足確認對象名、授權 GRANT SELECT ON tab TO user;
PLS-00302: component 'X' must be declared變量/遊標/類型未聲明檢查 DECLARE 區、包規格
PL/SQL: numeric or value error運行時數據類型轉換、溢出添加 EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); 打印錯誤碼

調試循環:修改 .sql → @script → / → 查錯誤 → 修正 → 重複,直到 Procedure created.。

七、刪除存儲過程

SQL> DROP PROCEDURE skeleton;
Procedure dropped.
  • 屬於 DDL(數據定義語言),隱式提交,不可回滾。
  • 同類 DDL:CREATE、ALTER、RENAME、TRUNCATE。

八、總結:開發標準化流程

  1. 編寫:在編輯器維護 .sql 文件,納入版本控制。
  2. 部署:@script 在 SQL*Plus/SQL Developer 執行。
  3. 驗證:EXECUTE 或匿名塊調用,SET SERVEROUTPUT ON 觀察輸出。
  4. 調試:讀取 USER_ERRORS、SHOW ERRORS、運行時異常捕獲。
  5. 發布:通過 CI/CD 流水線自動部署至測試/生產環境。
  6. 清理:廢棄過程及時 DROP,避免對象蔓延。

九、實際調用場景

  • 應用程式:JDBC CallableStatement、ODP.NET OracleCommand、Python cx_Oracle.callproc。
  • 觸發器:BEFORE/AFTER INSERT/UPDATE/DELETE ON table CALL proc_name;
  • 定時任務:DBMS_SCHEDULER.CREATE_JOB(job_action => 'proc_name');
  • 其他過程/函數/包內部調用。

結語

從 CREATE OR REPLACE PROCEDURE skeleton IS BEGIN NULL; END; 起步,掌握「編寫→部署→運行→修改→調試→刪除」完整生命周期,是每位 Oracle 開發者的必經之路。建議養成腳本化管理、版本控制、錯誤日誌輸出、單元測試覆蓋的工程化習慣,讓存儲過程從「能跑」進化為「可維護、可觀測、可演進」。

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