存储过程循环语句出现的怪事?

microchu 2003-06-24 10:15:54
Create OR REPLACE Package p_test
as
type NE_ID IS TABLE OF number(4) INDEX BY BINARY_INTEGER;
type DXC_NAME IS TABLE OF varchar(20) INDEX BY BINARY_INTEGER;
PROCEDURE pc_Stu(empID OUT NE_ID,empName OUT DXC_NAME);
END p_test;
/
CREATE OR REPLACE Package body p_test
as
PROCEDURE pc_Stu(empID OUT NE_ID,empName OUT DXC_NAME)
is
CURSOR c1 IS SELECT ID,NAME FROM NE_INFO WHERE Role =1 ORDER BY ID;
cnt NUMBER DEFAULT 1;
c c1%ROWTYPE;
Begin
OPEN c1;
LOOP
FETCH c1 INTO c;
empID(cnt) := c.ID;
empName(cnt) := c.NAME;
EXIT WHEN c1%NOTFOUND;
cnt := cnt + 1;
END LOOP;
CLOSE c1;
END pc_Stu;
END p_test;
/
上面的循环语句改用While...Loop:
WHILE c1%FOUND LOOP
FETCH c1 INTO cc1;
empID(cnt) := cc1.ID;
empName(cnt) := cc1.NAME;
cnt := cnt + 1;
END LOOP;

则没有任何结果返回?这是怎么回事?
...全文
25 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckhambobo 2003-06-24
  • 打赏
  • 举报
回复
循环前,首先fetch一个值,游标才会检查到。
如:
Begin
OPEN c1;
FETCH c1 INTO cc1;
WHILE c1%FOUND LOOP

empID(cnt) := cc1.ID;
empName(cnt) := cc1.NAME;
cnt := cnt + 1;
FETCH c1 INTO cc1;
END LOOP;
CLOSE c1;
END pc_Stu;
bobfang 2003-06-24
  • 打赏
  • 举报
回复
open后没有fetch,则c1%FOUND为false。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧