多次声明同一个游标时出现奇怪的游标行为

Strange Cursor behavior while declaring same cursor multiple times

通常当我使用不获取记录的查询声明游标时:

EXEC SQL Declare abcd Cursor For Select 'A' abc from dual where 1=2 

return sqlca.sqlcode 是 0。

所以我在一个被多次调用的函数中有一个游标。有时它会获取记录,有时它不依赖于流程阶段,但是在某些情况下,声明游标会抛出以下错误,并且在大多数情况下它会成功通过:

Code [1403], Error Message: [ORA-01403: no data found]

函数工作流()

{
    declare cursor
    open cursor
    for(;;)
    {
         fetch into x

         if(sqlca.sqlcode != 0)
               break;

         update using x
    }
    close cursor;
    commit;
}

有人可以指教一下,为什么有时我找不到数据。我的工作流程有问题吗?

经过大量的研发[基本上是很多 printf 的],我终于找出了错误....

 declare cursor doesn't change/return sqlca.sqlcode.

IDK 它是如何在内部工作的,但是从我的测试程序中我发现 1403 来自声明游标之前的另一个查询并且声明游标不是 returning/changing sqlca.sqlcode 1403 持续存在并导致错误。

如果有人能解释一下 declare 是如何工作的以及为什么它不工作,我真的很希望 return/manipulate sqlca.sqlcode。