多次声明同一个游标时出现奇怪的游标行为
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。
通常当我使用不获取记录的查询声明游标时:
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。