PL/SQL存储过程中in、out、in out用法
1.in参数:
用于接收参数,在子程序内部,不能进行修改。当参数没有写模式的时候,默认的参数模式:in。
例如:v_b number,其没有声明 in、out、in out,所以默认为in,in参数,则v_b 不能在子程序内部修改值。
2.out参数:
out参数,输出模式的参数,用于输出值,会忽略传入的值。在子程序内部可以对其进行修改。
实例:
create or replace procedure p(v_a in number,v_b number,v_ret out number,v_temp in out number) is begin dbms_output.put_line('v_ret---'||v_ret);--此处拿不到传入参数v_ret的值 v_ret := 100;--OUT 参数可以在子程序中赋值 dbms_output.put_line('v_ret---'||v_ret); --输出的 为程序内部的值 100 if(v_a>v_b) then v_ret := v_a; else v_ret :=v_b; end if; v_temp := v_temp+1; end; --执行过程 declare v_a number:=1; v_b number:=2; v_ret number :=1; v_temp number :=5; begin p(v_a,v_b,v_ret ,v_temp); --v_ret的值不会传入进去 dbms_output.put_line(v_ret); --输出的值为2 dbms_output.put_line(v_temp); --输出的值为6 end;
最终得到的输出结果
v_ret--- v_ret---100 2 6
3.in out参数:
能接收传入的实参值;在子程序内部可以修改,可以输出。
实例:
create or replace procedure p(v_a in number,v_b number,v_ret out number,v_temp in out number) is begin dbms_output.put_line('v_temp---'||v_temp);--对于 IN OUT 参数,此处能拿到值 v_temp := 100;--IN OUT 参数除了可以拿到入参的值,也可以在子程序中赋值 dbms_output.put_line('v_temp---'||v_temp); if(v_a>v_b) then v_ret := v_a; else v_ret :=v_b; end if; v_temp := v_temp+1; end; --执行存储过程 declare v_a number:=1; v_b number:=2; v_ret number :=1; v_temp number :=5; begin p(v_a,v_b,v_ret ,v_temp); dbms_output.put_line(v_ret); dbms_output.put_line(v_temp); end;
最终得到的输出结果
v_temp---5 v_temp---100 2 101