- C/C++ code
EXEC SQL DECLARE cur_001 CURSOR FOR SELECT name FROM same_table; EXEC SQL OPEN cur_001; while(1){ EXEC SQL FETCH cur_001 INTO :a; if(sqlca.sqlcode == 1403 ) break; else if(sqlca.sqlcode != 0) return -1; printf("%s 的成绩单如下:\n-------------------------------\n科目 | 分数\n",a); /*当cur_001还没有被取完时*/ EXEC SQL DECLARE cur_002 CURSOR FOR SELECT kemu,chengji FROM any_talbe where name = :a; EXEC SQL OPEN cur_002; while(1) { EXEC SQL FETCH cur_001 INTO :km,cj; if(sqlca.sqlcode == 1403 ) break; else if(sqlca.sqlcode != 0) return -1; printf("%s | %d\n-----------------------------------\n",km,cj); }}
简单的说就是从一张表遍历所有学生名单,找到一个同学的名字后,去另外一张表建立一个新cursor遍历此新cursor。
但是当第二个cursor执行完之后,fetch第二个同学名字的时候却报:
01002, "fetch out of sequence" 错误。
根本没办法完成设想中的过程。
我想问一下,有没有办法解决这种内游标循环完成,外游标却不能继续的问题。
不要告诉我用其他方式可以解决云云,这是我把问题抽象出来,做的一个最简单的例子,
我只想知道解决这种游标嵌套问题的方法,谢谢。
------解决方案--------------------
你内层也是操作 cur_001 ?
EXEC SQL FETCH cur_001 INTO :km,cj;
------解决方案--------------------
PROC*C中游标嵌套本身支持
两个问题:
(1) 当sqlca.sqlcode == 1403和sqlca.sqlcode != 0时,都应该关闭游标。这大概是报那个错的原因。
(2) 检查一下proc预编译参数mode是否指定了ansi,印象中如果指定了它,则sqlca.sqlcode == 100才表示记录已经读取完毕。
------解决方案--------------------