pl/sql存储过程loop死循环

本文详细探讨了一个存储过程中循环语句缺失退出条件导致的缓冲溢出错误,通过分析错误原因和尝试解决方案,最终找到有效解决办法。重点强调了正确使用跳出循环的语句对于避免内存泄露的重要性。

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

      今早,一个存储过程,写过很多次的存储过程,随手一写,各种报错,各种纠结,网上一搜,有好多个都遇到,论坛上给出的结局答案,都没说到点上,先看一下原程序,我注释掉的部分是我缺少的跳出循环语句。

declare
  type cur_type is ref cursor;
  cur_emp cur_type;
  r_emp emp%rowtype;
  v_sql varchar2(500);
begin
  v_sql:='select * from emp where sal>:sal';
  open cur_emp for v_sql using &请输入工资:;
  loop
    fetch cur_emp into r_emp;
    --exit when cur_emp%notfound;
    dbms_output.put_line(r_emp.ename||'-'||r_emp.sal);
  end loop;
  close cur_emp;
end;

oracle报错:

      突然间,我就发现了这个少了跳出循环的一步,那错误很简单,关键是这个报错,网上说set serveroutput size 100000000,或者serveroutput设置大一点,或者这样的set serveroutput on size unlimited,都试了,不可以。serveroutput就是pl/sql语言的dbms_output服务,把这个服务开启,服务就可以在控制台打印输出的内容。显然这个错误指的是缓冲溢出,很容易联想到死循环这样的错误导致,可惜一时没想出来,现在总结一下,谨记!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值