plsql 存储过程,IN、OUT、IN OUT 三种参数

首先看下 IN参数,用于接收参数,在子程序内部,不能进行修改。当参数没有写模式的时候,默认的参数模式:IN

v_b number,没有声明 IN、OUT、IN OUT,所以默认为 IN,IN参数,则v_b 不能再子程序内部修改值。

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);
  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;

结果:对于OUT参数v_ret,调用的时候传入的是 1 ,但是在程序中第一次拿入参v_ret的值为空,说明OUT参数拿不到入参的值,
但是可以在程序中对其进行赋值。

 

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;

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值