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" 错误。根本没办法完成设想中的过程。我想问一下,有没有办法解决这种内游标循环完成,外游标却不能继续的问题。不要告诉我用其他方式可以解决云云,这是我把问题抽象出来,做的一个最简单的例子,我只想知道解决这种游标嵌套问题的方法,谢谢。
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" 错误。根本没办法完成设想中的过程。我想问一下,有没有办法解决这种内游标循环完成,外游标却不能继续的问题。不要告诉我用其他方式可以解决云云,这是我把问题抽象出来,做的一个最简单的例子,我只想知道解决这种游标嵌套问题的方法,谢谢。
EXEC SQL FETCH cur_001 INTO :km,cj;
(1) 当sqlca.sqlcode == 1403和sqlca.sqlcode != 0时,都应该关闭游标。这大概是报那个错的原因。
(2) 检查一下proc预编译参数mode是否指定了ansi,印象中如果指定了它,则sqlca.sqlcode == 100才表示记录已经读取完毕。