Oracle儲存過程in、out、in out 模式引數
阿新 • • 發佈:2019-02-08
1、in模式引數
輸入模式的引數,用於接收引數,在子程式內部,不能進行修改。預設的引數模式:in。
--定義列印的儲存過程
CREATE OR REPLACE PROCEDURE println (str VARCHAR)
AS
BEGIN
dbms_output.put_line(str);
END;
--定義測試in模式的儲存過程
CREATE OR REPLACE PROCEDURE pro(p1 IN INT,p2 IN INT)--引數的個數、型別可以自定義,但是引數不允許指定長度
AS
BEGIN
println(p1);
println(p2);
--p2:=11 ; --in模式引數不能為其賦值
END;
--通過語句塊呼叫儲存過程
BEGIN
pro(10,100);
END;
2、out模式引數
輸出模式的引數,用於輸出值,會忽略傳入的值。在子程式內部可以對其進行修改。
輸出:子程式執行完畢後,out模式引數最終的值會賦值給呼叫時對應的<實參變數>。
注意:out模式引數的呼叫,必須通過變數。
--測試out模式的儲存過程
CREATE OR REPLACE PROCEDURE pro(p3 OUT INT)
AS
BEGIN
println(p3);--p3會忽略傳入的值
p3:=33;--設定儲存過程呼叫後的值
END ;
DECLARE
var3 INT :=30;--宣告一個變數用於設定儲存過程呼叫前的值
BEGIN
-- pro(30); --error,20對應過程中out模式的引數,out會輸出結果給呼叫的實參,但是20不能作為賦值目標
println('儲存過程呼叫前的值:'||var3);
pro(var3);--呼叫pro儲存過程重新賦值;呼叫過程,如果過程形參是out模式,必須採用變數實參
println('儲存過程呼叫後的值:'||var3);
END;
3、in out 模式引數
輸入輸出模式:能接收傳入的實參值;在子程式內部可以修改; 可以輸出(必須用實參變數呼叫)
--測試in out模式的儲存過程
CREATE OR REPLACE PROCEDURE pro(p4 IN OUT INT)
AS
BEGIN
println(p4);
p4:=44;--in out模式引數的值可以修改
END;
DECLARE
var4 INT :=40;--宣告一個變數用於設定儲存過程呼叫前的值
BEGIN
println('儲存過程呼叫前的值:'||var4);
pro(var4);--呼叫pro儲存過程重新賦值
println('儲存過程呼叫後的值:'||var4);
END;