关于informix的rowid问题,请大侠解决,谢谢!

yang0411 2003-01-23 08:45:42
RS/6000 AIX 环境下 Esql:
请教各位大侠:

程序的流程是这样的,
EXEC SQL DECLARE rs10_cur CURSOR FOR
SELECT rowid,*
FROM rspf10
WHERE ... FOR UPDATE;

EXEC SQL OPEN rs10_cur;

for(;;) {
EXEC SQL FETCH rs10_cur INTO :VSrowid,:Rspf10;
if (SQLCODE == SQLNOTFOUND) break;
if (SQLCODE != 0) return 300;

strcpy(Rspf10.rs10acno,PP1030);

EXEC SQL UPDATE rspf10 SET *=(:Rspf10)
WHERE rowid = :VSrowid;
}

表中只有一条记录,当修改成功后,循环并未退出,而是将修改后的记录又
读了出来,循环了两次。
...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgmzf 2003-02-10
  • 打赏
  • 举报
回复
建议不用rowid,在定义游标的时候已经使用了FOR UPDATE语句,则后面更新的时候可以用EXEC SQL UPDATE rspf10 SET *=(:Rspf10) where CURRENT OF rs10_cur 。
wenlq 2003-01-24
  • 打赏
  • 举报
回复
按你的循环结构,那条fetch 语句是会执行两次的。
第一次fetch后,SQLCODE=0 又执行了update语句。
因为是循环条件是真,所以又执行了fetch语句,
这次的SQLCODE=100 break 退出了

游标操作一般是这种结构:

declare a_cursor
open a_cursor
fetch a_cursor
while ( SQLCODE == 0 ){
process_something();
fetch a_cursor
}
close a_cursor
free a_cursor

1,194

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 Informix
社区管理员
  • Informix社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧