当 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 SQL%NOTFOUND 的 PL/SQL raise_application_error

pl sql %NOTFOUND

PL/SQL 如何创建字符串函数=

替换 PL/SQL 中的特殊 XML 字符

PL/SQL 游标的使用详解

PL/SQL 04 游标 cursor