1. 程式人生 > >PL/SQL 儲存過程入門小例子

PL/SQL 儲存過程入門小例子

1.為什麼要有儲存過程?

過程是指用於執行特定操作的PL/SQL塊。如果客戶應用經常需要執行特定操作,那麼可以考慮基於這些操作建立過程。(類似C函式,Java方法

2.oracle的儲存過程裡的傳遞引數是怎麼設定的?

當建立過程時,既可以指定過程引數,也可以不提供任何引數。當過程需要傳遞引數時,過程引數包括輸入引數、輸出引數和輸入輸出引數,其中輸入引數(IN)用於接收呼叫環境的輸入數 據,輸出引數(OUT)用於將輸出資料傳遞到呼叫環境,而輸入輸出引數(IN OUT)不僅要接收輸入資料,而且還要輸出資料到呼叫環境。(其中in,out,in out 就是用來表示引數傳遞的方式的,其中若引數後面沒有這個識別符號,則預設是in型的,也就是輸入引數

3.建立儲存過程的命令是什麼,語法又是什麼?

命令:create or replace procedure

語法:CREATE [OR REPLACE]PROCEDURE PROCEDURE_name
    (argument1 [mode1] datatype1,argument2 [mode2] datatype2, …)
IS [AS]
PL/SQLBlock;
如上所示,procedure_name 用於指定過程名,argument 用於指定過程引數,IS 或 AS用於開始PL/SQL塊。(注意,當定義引數時,只能指定資料型別,不能指定資料長度;oracle的in(或者out,in out)是放在引數之後的,如:a number out

)

4.怎麼讓建立好的過程接受輸入的引數值?

方法1:直接在呼叫過程時,給引數寫入值。如add(1,2);(假設已經寫好了add(a number,b number)這個儲存過程,用來計算a + b)

方法2:在PL/SQL呼叫儲存過程時,在引數前加&符號,如add(&c,&d),PL/SQL會彈出輸入c和d值的對話方塊(假設已經定義好c,d變數)

小例子:

建立一個,計算出a + b 和 a - b 的儲存過程,名為test(在PL/SQL中實現)

(1) .在PL/SQL中的SQL Window輸入框中輸入:

create or replace procedure test (   
p1 in out number,p2 in number,r1 out number,r2 out number) as
begin  
  r1 := p1 + p2;
  r2 := p1 - p2; 
  p1 := 888;
end test;
(2) .點選 Execute(F8) . 如果沒有錯誤,可以在PL/SQL左側欄的 All objects 下的 Procedures 資料夾下看到你剛才建立好的儲存過程

(3) .呼叫儲存過程,繼續輸入如下程式碼:

declare 
  a number(3) := 100;
  b number(4) := 1000;
  c number(5) := 100; 
  d number(4) := 100;
begin
  test(a,b,c,d);   --在PL/SQL中可以<span style="color:#ff0000;"><strong>在語句塊中</strong></span>直接引用,但在Sqlplus(或者commend中)需要call或者execute命令
  dbms_output.put_line('a + b = ' || c);
  dbms_output.put_line('a - b = ' || d);
  dbms_output.put_line('但a的值為:' || a || ', b的值為:' || b);
end;
(4) .選中上面這段程式碼,點選 Execute(F8),就可以在輸出框裡看到:
a + b = 1100
a - b = -900
但a的值為:888, b的值為:1000
總結:上面寫的test儲存過程裡,p1為輸入輸出引數,p2為輸入引數,r1及r2為輸出引數。以該儲存過程為主體理解,面對輸入引數只取其值,面對輸出引數只給其賦值,面對輸入輸出引數,先取其值,再給其賦值。如:a作為輸入輸出引數傳遞給p1,儲存過程先取p1的值100,然後再將888賦值給p1,這樣a的值就變為888了。