RPGLE中嵌入SQL时的RNF7049错误处理

本文探讨了RNF7049错误的原因及解决方案,该错误与程序中GOTO语句处理NODATA有关。通过调整游标处理顺序,可以有效避免此错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个错误来自于程序中在处理NO DATA的GOTO语句,信息如下:

The GOTO branches from within a subroutine to another 

subroutine; the specification is ignored.

ILERPG处理NO DATA如下:

 * 没数据则关闭游标                          
C/EXEC SQL WHENEVER NOT FOUND GO TO CLOS1    
C/END-EXEC
......
 * 关闭游标             
C     CLOS1         TAG 
C/EXEC SQL CLOSE C1     
C/END-EXEC      

若程序里面分情况定义多个游标,分别处理多种不同情况下的查询,如下:

C/EXEC SQL
C+    DECLARE C1 CURSOR FOR SELECT ...
C/END-EXEC

C/EXEC SQL
C+    DECLARE C2 CURSOR FOR SELECT ...
C/END-EXEC
...
处理SQL和处理业务逻辑的过程如下:

定义游标 -> 打开游标 -> 无数据处理(WHENEVER) -> 业务逻辑 -> 关闭游标

按照这样的顺序过程处理的话,在编译的时候,RNF7049错误就出来了,

错误直接指向第二个游标的NO DATA处理,其游标名称居然是其前一个游标名!?

如果按照下面的顺序处理:

定义游标 -> 无数据处理(WHENEVER) -> 业务逻辑 -> 关闭游标

此问题解决!

更多关于RNF7049错误处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值