zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

PL/SQL存储过程中in、out、in out用法

存储SQL in 用法 过程 out PL
2023-09-27 14:26:14 时间

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