巧妙解决Oracle中存储过程入参名称和表字段名称相同而导致的问题

当Oracle的存储过程的入参名称与表过滤字段名称相同时,编译都可以通过,但执行就会报如下的错误:

ORA-01422: 实际返回的行数超出请求的行数

 

如下面的的存储过程,就会报上面的错误

create  or replace procedure poor.POrdersInsert(
EncounterID in varchar2                -- 就诊Id
)as
RegisterId  number(10,0);  --挂号Id
begin
       --到这里就会提示返回多行而报错
      select extension into RegisterId from prpa.EncounterII where encounterId=EncounterID;
      dbms_output.put_line('挂号Id:'||RegisterId);
end;

 

 

解决方法很简单,只需要定义一个临时变量,用来存储 ‘存储过程’的的入参,当表的过滤条件使用到存储过程入参作为过滤条件时,全部用临时变量代替,所以上面有问题的sql改入如下:

create  or replace procedure poor.POrdersInsert(
EncounterID in varchar2                --就诊Id
)as
V_EncounterId int;    --定义临时变量
RegisterId  number(10,0);  --挂号Id
begin
      
      V_EncounterId:=EncounterID;    --使用临时变量来存储 ‘存储过程’的入参 
      select extension into RegisterId from prpa.EncounterII where encounterId=V_EncounterId;  --过滤条件全部使用临时变量代替
      dbms_output.put_line('挂号Id:'||RegisterId);
end;

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值