甲骨文中的"BULK COLLECT"陷入无限循环



我在Oracle的SCOTT中创建了如下的Package/Body。

-- PACKAGE SPECIFICATION:
create or replace package emp_pkg Is
TYPE tbl_emp IS TABLE OF EMP%ROWTYPE;
PROCEDURE p_displayEmpName;

end emp_pkg;
-- PACKAGE BODY:
create or replace package body emp_pkg Is

PROCEDURE p_displayEmpName IS   
CURSOR c_rec IS select * from emp where deptno = 30;
v_tbl_emp tbl_emp;
BEGIN
open c_rec;
loop
fetch c_rec bulk collect into v_tbl_emp;
for i in 1..v_tbl_emp.count loop
dbms_output.put_line(v_tbl_emp(i).ename || ','||v_tbl_emp(i).hiredate);
end loop;
end loop;
END p_displayEmpName;
end emp_pkg;   

我没有问题编译包和主体。

一旦我执行了这个过程,它就会进入一个无限循环:

-- CALL ing the procedure:
exec emp_pkg.p_displayempname;

我怎么知道我做错了什么?

EXIT循环时没有更多的行和CLOSE你的光标(是的,它应该隐式关闭,但最好养成良好的习惯,总是关闭它,当你使用的语言/驱动程序,游标不是隐式关闭):

create or replace package body emp_pkg Is

PROCEDURE p_displayEmpName
IS   
CURSOR c_rec IS select * from emp where deptno = 30;
v_tbl_emp tbl_emp;
BEGIN
open c_rec;
loop
EXIT WHEN c_rec%NOTFOUND;
fetch c_rec bulk collect into v_tbl_emp LIMIT 50;
for i in 1..v_tbl_emp.count loop
dbms_output.put_line(v_tbl_emp(i).ename || ',' || v_tbl_emp(i).hiredate);
end loop;
end loop;
CLOSE c_rec;
END p_displayEmpName;
end emp_pkg;
/

db<此处小提琴>

最新更新