存储过程结合游标的使用错误--------ORA-01403

本文通过一个具体示例,展示了如何排查并解决Oracle数据库中存储过程结合游标使用时出现的ORA-01403未找到数据错误。通过逐步调试和异常处理,确保了程序的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在存储过程结合游标的使用过程中报出ORA-01403未找到数据错误!

贴出一个小  demo,不用看表名和数据

create or replace procedure PROC_ADDETCDATA
 AS
  crstrnum        varchar2(20);
 
    CURSOR etc_data IS
    select t.cardnbr from cardetcinfo t where nvl(t.custr,0)=0;
      
begin
   for etcdata_data in etc_data LOOP
       BEGIN
      select  t1.CUSTR into crstrnum  --错误行

       from carddetails t1 where t1.cardnbr= etcdata_data.cardnbr;

 dbms_output.put_line(crstrnum);

   update cardetcinfo t2 set t2.custr=crstrnum;

   end;

   end loop; 

   commit; 

end  PROC_ADDETCDATA;

一看到这个 “未找到数据错误”

1.首先会去想游标是不是为空的 ,验证之后排除游标原因

2.一步一步调试代码,发现错误行,之后拿游标的值为条件去测试错误行的sql,会发现错误行的sql拼上游标内的条件后查询结果为空,找到原因所在

为避免这个原因可以加上异常捕获处理,并可以作为异常日志写入库中

 EXCEPTION
    WHEN OTHERS THEN
   V_ERROR := SQLCODE;--可在创建游标时声明参数
    DBMS_OUTPUT.PUT_LINE(V_ERROR);
                       --本行可写插入语句
    COMMIT;
    ROLLBACK;


如有描述不清楚的地方,还请回帖,必定回复!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值