我在 oracle 的 SCOTT 中創建了如下包/正文。
-- 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;
但我無法弄清楚我做錯了什么。
感謝您的幫助!
uj5u.com熱心網友回復:
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<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336359.html
上一篇:工資低于部門平均水平的員工
下一篇:為函式的回傳值選擇什么型別
