1. 程式人生 > >Oracle儲存過程in、out、in out 模式引數

Oracle儲存過程in、out、in out 模式引數

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;

這裡寫圖片描述