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" 错误。根本没办法完成设想中的过程。我想问一下,有没有办法解决这种内游标循环完成,外游标却不能继续的问题。不要告诉我用其他方式可以解决云云,这是我把问题抽象出来,做的一个最简单的例子,我只想知道解决这种游标嵌套问题的方法,谢谢。

解决方案 »

  1.   

    你内层也是操作 cur_001  ?
    EXEC   SQL   FETCH   cur_001  INTO   :km,cj; 
      

  2.   

    PROC*C中游标嵌套本身支持两个问题:
    (1) 当sqlca.sqlcode == 1403和sqlca.sqlcode != 0时,都应该关闭游标。这大概是报那个错的原因。
    (2) 检查一下proc预编译参数mode是否指定了ansi,印象中如果指定了它,则sqlca.sqlcode == 100才表示记录已经读取完毕。