双层游标循序,导致ORA-01001错误的解决方法

下面的代码是双层游标循环:

 

  EXEC SQL PREPARE stat_ifinfo FROM :ifinfoSQL;
    EXEC SQL DECLARE cur_ifinfo CURSOR FOR stat_ifinfo;
	EXEC SQL OPEN cur_ifinfo USING :tpStr, :passTypeStr;

    /* 接口定义表的游标声明、定义与打开                                                               */
    EXEC SQL PREPARE stat_msgno FROM :msgnoSQL;
    EXEC SQL DECLARE cur_msgno CURSOR FOR stat_msgno;
	

    EXEC SQL WHENEVER NOT FOUND DO BREAK;//当循环时,没有数据则break.此语句要写在循环语句上面
    for(;;){
        EXEC SQL FETCH cur_ifinfo INTO :IFCodeStr :ind_IFCode;
                 ......
        if(strcmp(IFCodeStr, "") != 0){
            EXEC SQL OPEN cur_msgno USING :IFCodeStr;
            for(;;){

                EXEC SQL FETCH cur_msgno INTO :i_dataitem, :msgnoStr, :msgposStr, :msglenStr;
                
            }

            //EXEC SQL CLOSE cur_msgno;此处关闭将会导致无效游标的错误
        }else{
            .....
        }

    }
    EXEC SQL CLOSE cur_msgno;
    EXEC SQL CLOSE cur_ifinfo;
    EXEC SQL WHENEVER NOT FOUND CONTINUE;//需变更回<NOT FOUND>的处理方式
 

关闭游标需要在二层遍历游标之外。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值