问答详情
源自:3-2 PL/SQL光标之光标的语法和第一个实例

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

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

提问者:JesonWu 2016-01-21 11:25

个回答

  • 刨根儿
    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会保留最后一次被赋予的值。