当 PL/SQL 中的 %NOTFOUND 为 NULL [重复]
Posted
技术标签:
【中文标题】当 PL/SQL 中的 %NOTFOUND 为 NULL [重复]【英文标题】:when %NOTFOUND is NULL in PL/SQL [duplicate] 【发布时间】:2014-05-30 21:21:54 【问题描述】:请你帮帮我! 我有一个 PL/SQL 程序
`DECLARE
//DECLARION OF CURSOR
BEGIN
OPEN cur_emp:
LOOP
FETCH cur_emp INTO ...;
EXIT WHEN cur_emp%NOTFOUND;
END LOOP;
END;
/ `
问题是这个循环什么时候是无限的? 谢谢
【问题讨论】:
所以你是说这个循环没有终止? 这是一个标准的光标属性问题(来自手册)。 Oracle 手册中的答案是:“如果 FETCH 从未成功执行,则 EXIT WHEN 条件永远不会为 TRUE,并且循环永远不会退出。”提倡的方法是“EXIT WHEN cur_emp%NOTFOUND OR cur_emp%NOTFOUND IS NULL”,它将解决从未成功执行提取的 NULL 场景。 @Patrick - 我每天都学到新东西。谢谢!请将其发布为答案,以便对其进行投票/接受。 【参考方案1】:Oracle 关于游标属性的文档解决了这种无限循环风险。 Oracle 手册中的答案是:“如果 FETCH 从未成功执行,则 EXIT WHEN 条件永远不会为 TRUE,并且循环永远不会退出。”提倡的做法如下:
EXIT WHEN cur_emp%NOTFOUND OR cur_emp%NOTFOUND IS NULL
这将解决提取从未成功执行的 NULL 场景。
【讨论】:
以上是关于当 PL/SQL 中的 %NOTFOUND 为 NULL [重复]的主要内容,如果未能解决你的问题,请参考以下文章