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

Oracle 存儲過程完整入門:參數模式、建立/編譯/呼叫/刪除與權限模型

     編輯:Oracle 資料庫基礎

存儲過程核心優勢

  • 效能: 編譯後儲於 Server 端,執行無網路傳輸 SQL 文本開銷。
  • 安全: 封裝業務邏輯,隱藏表結構,授權 EXECUTE 而非 SELECT/INSERT。
  • 模組化: 共用邏輯集中維護,應用端僅呼叫介面。
  • 減少網路往返: 批次業務單次呼叫完成多步驟。

參數三屬性

屬性說明
名稱合法 PL/SQL 識別碼
模式IN (預設,唯讀)、OUT (唯寫,返回值)、IN OUT (雙向)
資料型別標量型別、%TYPE、%ROWTYPE、PL/SQL 型別、物件型別

%TYPE 參照欄位型別,%ROWTYPE 參照整列結構,結構變更自動同步,極利維護。

建立最簡存儲過程

CREATE OR REPLACE PROCEDURE pro_1 (p_id VARCHAR2) IS
  v_name VARCHAR2(20);
BEGIN
  DBMS_OUTPUT.PUT_LINE('ID:' || p_id || ' Name:' || v_name);
END;
  • CREATE OR REPLACE:不存在則建立,存在則覆蓋(保留權限)。
  • IS ... BEGIN ... END;:宣告區與執行區。

編譯存儲過程

  • 工具:PL/SQL Developer → Execute (F8)。
  • 命令列:ALTER PROCEDURE pro_1 COMPILE;(需 ALTER ANY PROCEDURE 權限)。

呼叫存儲過程

刪除存儲過程

DROP PROCEDURE pro_1;

進階:Invoker's Rights vs Definer's Rights

CREATE PROCEDURE proc_ir AUTHID CURRENT_USER IS ...  -- 呼叫者權限
CREATE PROCEDURE proc_dr AUTHID DEFINER IS ...       -- 定義者權限(預設)
  • Definer's Rights: 以擁有者權限執行,呼叫者僅需 EXECUTE 權限,核心封裝模式。
  • Invoker's Rights: 以呼叫者權限執行,適用於需操作呼叫者 Schema 物件的工具類程序。

總結

存儲過程 = Server 端業務邏輯容器。掌握 CREATE PROCEDURE、IN/OUT/IN OUT 參數模式、ALTER PROCEDURE COMPILE、EXECUTE 呼叫、DROP PROCEDURE 五大核心操作,並理解 AUTHID 權限模型,即可開始編寫生產級存儲過程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
環境語法
PL/SQL 區塊BEGIN pro_1('00813045'); END;
SQL*Plus / SQLclSET SERVEROUTPUT ON; EXECUTE pro_1('00813025');
Shell 腳本sqlplus -s user/pass @call_proc.sql 內含 EXEC pro_1(...);