pl/sql存储过程loop死循环

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

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报错:

pl/sql存储过程loop死循环

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

相关推荐