【问题标题】:Strange Cursor behavior while declaring same cursor multiple times多次声明同一个游标时出现奇怪的游标行为
【发布时间】:2017-11-03 10:56:24
【问题描述】:

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

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

返回 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;
}

有人可以告诉我,为什么有时我会收到 No-Data-Found。我的工作流程有问题吗?

【问题讨论】:

    标签: c oracle-pro-c


    【解决方案1】:

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

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

    IDK 它是如何在内部工作的,但是从我的测试程序中,我发现 1403 来自另一个查询,然后声明游标和声明游标未返回/更改 sqlca.sqlcode 1403 持续存在并导致错误。

    如果有人能解释一下 declare 的工作原理以及为什么它不返回/操作 sqlca.sqlcode,我真的很高兴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多