exit when cursor%notfound 放在fetch的前面会比放在fetch后面多loop一个次,这是为什么?

来源:3-2 PL/SQL光标之光标的语法和第一个实例

JesonWu

2016-01-21 11:25

exit when cursor%notfound 放在fetch的前面会比放在fetch后面多loop一个次,这是为什么?不是见到这个exit when,满足条件就立马跳出循环吗?

写回答 关注

2回答

  • 刨根儿
    2022-12-02 15:25:26

    显式游标属性:

     %FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。

    %NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。

    %ROWCOUNT:当前时刻已经从游标中获取的记录数量。

    %ISOPEN:是否打开。

    ------

    所以最后一行fetch后,再判断notfound才能跳出循环。

    而fetch超出行数时,不会报错,仍保留最后一次的值。

    下载视频          
  • JesonWu
    2016-01-21 11:33:49

    因为%notfound是根据最后一次fetch来判断的,因此当输出最后一条记录后,还会在输出最一条记录,即最后一条记录将输出2遍
            最后一次循环将处理在"结果集最后一行"的下一行,该行为NULL,当fetch的时候PL/SQL将不会抛出异常,并且不会覆盖最后一次循环中赋予tempName的值,即tempName会保留最后一次被赋予的值。

Oracle数据库开发必备利器之PL/SQL基础

Oracle数据库高级开发必备的基础,通过实例带你熟练掌握

75048 学习 · 208 问题

查看课程

相似问题