★ 存儲過程的參數(shù)模式
調(diào)用程序是通過參數(shù)向存儲過程傳值的存儲過程out結(jié)果集,存儲過程中的形參接收調(diào)用者傳遞過來的參數(shù),并且在過程中可以使用。默認(rèn)情況下,存儲過程中的參數(shù)在過程中只能使用,不能對參數(shù)重新賦值。存儲過程中參數(shù)傳遞共有三種模式: 分別是IN、OUT 和IN OUT。參數(shù)的具體語法是:
參數(shù)名稱[IN丨OUT丨IN OU]數(shù)據(jù)類型
說明:
1. IN;默認(rèn)模式,表示參數(shù)只能由外界輸入,不能在存儲過程中對IN參數(shù)重新賦值。該參數(shù)可以有默認(rèn)值。
2. OUT: 該參數(shù)不能有默認(rèn)值,該參數(shù)不能接收數(shù)據(jù),在存儲過程中對OUT參數(shù)進行賦值后,該值可以被調(diào)用者捕獲,調(diào)用者調(diào)用時對OUT參數(shù)只能使用變量作為參數(shù),不能使用常量。
3. IN OUT: 該參數(shù)在存儲過程中可以接收數(shù)據(jù),也可以對IN OUT參數(shù)賦值,賦值后的IN OUT參數(shù)可以被調(diào)用者捕獲,調(diào)用者調(diào)用時對IN OUT 參數(shù)只能使用變量作為參數(shù),不能使用常量。IN OUT 參數(shù)不能包含默認(rèn)值。
代碼演示:存儲過程的參數(shù)模式
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 參數(shù),只能往存儲過程中接收數(shù)據(jù),不能對 進行賦值。
② comm 是OUT 參數(shù),存儲過程中不能接收參數(shù),可以對comm 進行賦值。
調(diào)用方式:
代碼演示:帶OUT 參數(shù)的調(diào)用
SQL>
2 :
3 BEGIN
4 (7499,); ①
.(’實際發(fā)放獎金是:’丨丨);
6 END;
7 /
實際發(fā)放獎金是:1300
PL/SQL
代碼解析:
① 調(diào)用帶OUT參數(shù)的存儲過程程時,要用一個變量作為參數(shù)。調(diào)用存儲過程之后,就能返回存儲過程中對OUT 參數(shù)的最后賦值結(jié)果。
代碼演示:帶IN OUT 參數(shù)
OR swap(numt IN OUT ,num2 IN OUT )
IS
tmp ;
BEGIN
tmp:=numt;
num1 : =num2 :
num2: =tmp;
END swap;
IN OUT 參數(shù)的過程中對參數(shù)可以接收數(shù)據(jù),也可以對參數(shù)進行賦值操作。
★ 默認(rèn)值參數(shù)
代碼演示:默認(rèn)值參數(shù)
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匕l(fā)ine(’查無此人!’);
END ;
代碼解析:
① 在參數(shù)定義同時用 (或者賦值運算符) 直接對參數(shù)進行初始化存儲過程out結(jié)果集,即參數(shù)的默認(rèn)值,當(dāng)調(diào)用者沒有對該參數(shù)傳值時,過程中就使用參數(shù)默認(rèn)值。一個過程中可以有著干個默認(rèn)值參數(shù),但是默認(rèn)值參數(shù)只能放在參數(shù)列表的最后。
代碼演示:默認(rèn)值參數(shù)調(diào)用
SQL> (7499,1500)) ①
需要激稅:380
PL/SQL
SOL> (7499); ②
需要激稅:380
PL/SQL
代碼解析:
① 正常參數(shù)調(diào)用,傳入兩個參數(shù),過程中兩個參數(shù)分別接收
② 傳入一個參數(shù)被過程中第一個參數(shù)接收,過程中第二個參數(shù)使用默認(rèn)值。