这个错误来自于程序中在处理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错误的原因及解决方案,该错误与程序中GOTO语句处理NODATA有关。通过调整游标处理顺序,可以有效避免此错误。

被折叠的 条评论
为什么被折叠?



