不用计算,
用 for cursor_rec in cursor
loop 
end loop;
或者,
exit when cursor_rec%notfound.
都可以,

解决方案 »

  1.   

    不用那么复杂:EXEC SQL DECLARE cursor1 CURSOR FOR
       SELECT FieldA FROM TableA WHERE FieldA=:id;
    EXEC SQL OPEN cursor1;
    while ((sqlca.sqlcode==0)&&(sqlca.sqlcode!=1403))
    {
       EXEC SQL FETCH cursor1 INTO :pid;   if(sqlca.sqlcode==1403)break;   if (sqlca.sqlcode==0)
       {
            /*一些操作*/
            i++;
        }
        else
        {
             EXEC SQL CLOSE cursor1;
    return sqlca.sqlcode;
         }

    EXEC SQL CLOSE cursor1;
      

  2.   

    谢谢二位,看来我计算数目是画蛇添足了。请教另外一种情况,假如循环中的操作也是SQL语句(见下面(2)),
    并且我希望不论操作是否成功都继续循环。那么是不是
    不能用sqlca.sqlcode作为while循环条件了?比如:
    EXEC SQL DECLARE cursor1 CURSOR FOR
       SELECT FieldA FROM TableA WHERE FieldA=:id;
    EXEC SQL OPEN cursor1;
    while ((sqlca.sqlcode==0)&&(sqlca.sqlcode!=1403))
    {
       EXEC SQL FETCH cursor1 INTO :pid;   if(sqlca.sqlcode==1403)break;   if (sqlca.sqlcode==0)
       {
            /*一些操作*/
            EXEC SQL DELETE FROM tableC WHERE xxxxx; /* (2) */
            i++;
        }
        else
        {
             EXEC SQL CLOSE cursor1;
    return sqlca.sqlcode;
         }

    EXEC SQL CLOSE cursor1;
      

  3.   

    另外while ((sqlca.sqlcode==0)&&(sqlca.sqlcode!=1403))
    可能是while ((sqlca.sqlcode==0)||(sqlca.sqlcode!=1403))吧
      

  4.   

    也可以用,在错误操作之后执行一个肯定正确的sql,如"select sysdate from dual".while ((sqlca.sqlcode==0)||(sqlca.sqlcode!=1403))是什么意思?发生错误也继续(sqlca.sqlcode<0)?while ((sqlca.sqlcode==0)&&(sqlca.sqlcode!=1403))
    的意思是sql执行正常,并且游标有数据
      

  5.   

    while ((sqlca.sqlcode==0)&&(sqlca.sqlcode!=1403))
    我理解的是如果sqlca.sqlcode==0肯定就不等于1403啊。我写错了,本来是要写
    while ((sqlca.sqlcode==0)||(sqlca.sqlcode==1403))
    如果sqlca.sqlcode为0或为1403