Fork me on GitHub

Programming Design Notes

Oracle Stored Procedure

| Comments

Oracle Stored Procedure 是可以重覆使用的程序,和 Oracle Stored Function 不同的是 Oracle Stored Procedure 不能返回數值。我們可以將一些重覆性的步驟預先寫到 Procedure 中。

Oracle Stored Procedure 格式如下:
CREATE OR REPLACE 
PROCEDURE PROCEDURE_NAME(
args1 NUMBER,
args2 VARCHAR2(20) )
AS
localVar1 NUMBER := 300;
localVar2 VARCHAR(20) := 'Hello World';
BEGIN
DBMS_OUTPUT.PUT_LINE('args1: ' || args1 || ' args2: ' || args2 || ' localVar1: ' || localVar1 || ' localVar2: ' || localVar2);
END PROCEDURE_NAME;

CREATE OR REPLACE PROCEDURE procedure_name 是 Stored Procedure 的開始。

其中的 args1 和 args2 是使用這個 Stored Procedure 時要傳入的變數。
使用方法:
BEGIN
PROCEDURE_NAME(100, 'Hello World');
END;

亦可以預先設定 args 的數值。
CREATE OR REPLACE 
PROCEDURE PROCEDURE_NAME(
args1 NUMBER := 100,
args2 VARCHAR2(20) := 'Hello World' )

使用方法:
BEGIN
PROCEDURE_NAME();
PROCEDURE_NAME(150);
PROCEDURE_NAME(200, 'lawpronotes');
END;

這樣變成不傳入變數時便使用預設的數值。

如果 Stored Procedure 無需傳入數值可以不使用 ()
即是像以下這樣:
CREATE OR REPLACE 
PROCEDURE PROCEDURE_NAME
AS

而 AS 和 BEGIN 中間的部分是用來定義內部變數的位置,即是 localVar1 和 localVar2。

BEGIN 和 END procedure_name; 中間的部分是 Stored Procedure 的主體,是寫 PL/SQL 的地方,DBMS_OUTPUT.PUT_LINE() 是系統的 function,作用是將資料打印在 console 上,在這裡我將所有變數數值打印出來。

而 PL/SQL 用 || 將字串連接起來,作用就好像 Java 的 + 。

最後使用 END PROCEDURE_NAME; 表示 Stored Procedure 完結。

相關書籍: Oracle PL/SQL Programming: Covers Versions Through Oracle Database 11g Release 2 (Animal Guide)Beginning PL/SQL: From Novice to ProfessionalOracle Database 11g PL/SQL Programming (Osborne ORACLE Press Series)