免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3439 | 回复: 5
打印 上一主题 下一主题

关于Pro*C 游标操作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-16 21:17 |只看该作者 |倒序浏览
本帖最后由 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(无效游标)。
难道是对一张表不能定义两个游标?

论坛徽章:
0
2 [报告]
发表于 2010-08-16 21:31 |只看该作者
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. 不知道怎么解决,请教各位朋友。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
3 [报告]
发表于 2010-08-16 22:18 |只看该作者
楼主看来是专稿proc的啊。

论坛徽章:
0
4 [报告]
发表于 2010-08-16 22:25 |只看该作者
没有专稿啊,做银行项目,后台都是C程序,不得不用啊。。哎!!   PROC*C 文档也少,感觉着语言很不好用

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
5 [报告]
发表于 2010-08-17 08:30 |只看该作者
这种文档一般都只有官方才有吧。因为用的人实在太少了。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2010-08-17 18:09 |只看该作者
你用完close后再commit试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP