★ 存儲過程的參數模式
調用程序是通過參數向存儲過程傳值的存儲過程out結果集,存儲過程中的形參接收調用者傳遞過來的參數,并且在過程中可以使用。默認情況下,存儲過程中的參數在過程中只能使用,不能對參數重新賦值。存儲過程中參數傳遞共有三種模式: 分別是IN、OUT 和IN OUT。參數的具體語法是:
參數名稱[IN丨OUT丨IN OU]數據類型
說明:
1. IN;默認模式,表示參數只能由外界輸入,不能在存儲過程中對IN參數重新賦值。該參數可以有默認值。
2. OUT: 該參數不能有默認值,該參數不能接收數據,在存儲過程中對OUT參數進行賦值后,該值可以被調用者捕獲,調用者調用時對OUT參數只能使用變量作為參數,不能使用常量。
3. IN OUT: 該參數在存儲過程中可以接收數據,也可以對IN OUT參數賦值,賦值后的IN OUT參數可以被調用者捕獲,調用者調用時對IN OUT 參數只能使用變量作為參數,不能使用常量。IN OUT 參數不能包含默認值。
代碼演示:存儲過程的參數模式
OR
( IN ,comm OUT )
IS
emp.sal%HTYPE;
m%TYPE;
BEGIN
sal,comm INTO , FROM emp WHERE empno=;
IF >1500 THEN
comm: = +1000;
END IF;
WHEN THEN
.(’查無此人!‘);
END ;
代碼解析:
① 是tN 參數,只能往存儲過程中接收數據,不能對 進行賦值。
② comm 是OUT 參數,存儲過程中不能接收參數,可以對comm 進行賦值。
調用方式:
代碼演示:帶OUT 參數的調用
SQL>
2 :
3 BEGIN
4 (7499,); ①
.(’實際發放獎金是:’丨丨);
6 END;
7 /
實際發放獎金是:1300
PL/SQL
代碼解析:
① 調用帶OUT參數的存儲過程程時,要用一個變量作為參數。調用存儲過程之后,就能返回存儲過程中對OUT 參數的最后賦值結果。
代碼演示:帶IN OUT 參數
OR swap(numt IN OUT ,num2 IN OUT )
IS
tmp ;
BEGIN
tmp:=numt;
num1 : =num2 :
num2: =tmp;
END swap;
IN OUT 參數的過程中對參數可以接收數據,也可以對參數進行賦值操作。
★ 默認值參數
代碼演示:默認值參數
OR
(emp-no ,bese-sel 1500) ①
IS
esal ;
tax ;
BEGIN
sal+comm INTO esal FROM emp WHERE empno-;
IF esal> THEN
tax: =esal*0.2;
.(’需要繳稅 :’丨丨tax) ;
END IF;
WHEN THEN
dbms-.pu匕line(’查無此人!’);
END ;
代碼解析:
① 在參數定義同時用 (或者賦值運算符) 直接對參數進行初始化存儲過程out結果集,即參數的默認值,當調用者沒有對該參數傳值時,過程中就使用參數默認值。一個過程中可以有著干個默認值參數,但是默認值參數只能放在參數列表的最后。
代碼演示:默認值參數調用
SQL> (7499,1500)) ①
需要激稅:380
PL/SQL
SOL> (7499); ②
需要激稅:380
PL/SQL
代碼解析:
① 正常參數調用,傳入兩個參數,過程中兩個參數分別接收
② 傳入一個參數被過程中第一個參數接收,過程中第二個參數使用默認值。