+ -
当前位置:首页 → 问答吧 → 关于Pro*C 游标操作的问题

关于Pro*C 游标操作的问题

时间:2010-08-16

来源:互联网

本帖最后由 UCfree 于 2010-08-16 21:23 编辑

各位朋友好,我是oracle新手,今天用PROC*C的游标时遇见很纠结的问题,代码大致如下:

fun1()
{
      EXEC SQL DECLARE cur_insert_line CURSOR FOR
      SELECT HOSTLS FROM T_AUTH_TEMP
      WHERE RECON_FLAG = :iReconFlag;

      EXEC SQL OPEN cur_insert_line;

      while (1)
      {
               EXEC SQL fetch...;
               EXEC SQL INSERT ...;
     }
      EXEC SQL COMMIT WORK;
      EXEC SQL CLOSE cur_insert_line;
}

fun2()
{
      EXEC SQL DECLARE cur_update_test CURSOR FOR
      SELECT TAB_FLAG
       FROM T_AUTH_TEMP;

      EXEC SQL OPEN cur_update_test ;

      while (1)
      {
               EXEC SQL fetch...;
               EXEC SQL UPDATE ...;
     }
      EXEC SQL COMMIT WORK;
      EXEC SQL CLOSE cur_update_test ;
}

我想分别用两次游标来操作表T_AUTH_TEMP,执行不同的操作,可是fun1执行时成功的,但fun2去提示定义游标失败,返回-1001(无效游标)。
难道是对一张表不能定义两个游标?

作者: UCfree   发布时间: 2010-08-16

fun()
{
      EXEC SQL DECLARE cur CURSOR FOR
      SELECT HOSTLS, TAB_FLAG FROM T_AUTH_TEMP;

      EXEC SQL OPEN cur;

      while (1)
      {
               EXEC SQL fetch...;
               EXEC SQL INSERT ...;
     }
      EXEC SQL COMMIT WORK;
      EXEC SQL CLOSE cur;

     /* 重新打开游标,使用表重定位 */
    EXEC SQL OPEN cur;
    while (1)
      {
               EXEC SQL fetch...;
               EXEC SQL UPDATE ...;
     }
      EXEC SQL COMMIT WORK;
      EXEC SQL CLOSE cur;
}

后来我干脆两个函数合起来写,只定义一个游标,执行我第一个操作后。重新打开游标,让游标又回到开头,可是这样fetch时也获取不到记录,还是返回-1001. 不知道怎么解决,请教各位朋友。

作者: UCfree   发布时间: 2010-08-16

楼主看来是专稿proc的啊。

作者: renxiao2003   发布时间: 2010-08-16

没有专稿啊,做银行项目,后台都是C程序,不得不用啊。。哎!!   PROC*C 文档也少,感觉着语言很不好用

作者: UCfree   发布时间: 2010-08-16