编写RPGLE程序C段时遇Compiler directive not recognized错误求助
解决RPGLE C段SQL编译指令错误
错误信息
Compiler directive not recognized; directive ignored
该错误出现在代码最后6行的SQL嵌入部分,你的代码如下:
HDatedit(*ymd) datfmt(*iso) FQPRINT O F 132 PRINTER OFLIND(*INOV) DWCLICLA S 5 0 DWCLINOM S 45 DWCLICEL S 15 DWCLISEX S 1 DWCLIEMAIL S 30 DWCLIESTD S 1 DWCLIDEP S 2 0 C* C EXCEPT CABECERA C EXCEPT linea C* C/EXEC SQL C+ DECLARE C1 CURSOR FOR C+ SELECT CLICLAV, CLINOM, CLICEL, CLISEX, CLIEMAIL C+ FROM CLIENTES C+ ORDER BY CLICLAV C/end-exec
问题原因及解决方法
使用正确的编译命令
嵌入SQL的RPGLE程序不能用普通的CRTRPGLE命令编译,必须使用CRTSQLRPGI命令——该命令会先完成SQL语句的预处理,再编译RPGLE代码。在PUB400环境中,编译时要选择这个命令,或者在源成员的编译选项中指定SQL预处理。修正固定格式SQL行的位置
固定格式RPGLE对SQL嵌入指令的列位置有严格要求:C/EXEC SQL必须从代码的第6列开始(即固定格式中标记为C的列位置)- 后续的
C+续行也必须从第6列开始,SQL语句本身从第7列往后编写
检查你的代码行位置,确保这些指令的列位置符合要求。
推荐改用自由格式代码(V7R5支持)
V7R5完全支持自由格式RPGLE,嵌入SQL的写法更简洁且不易出错,示例如下:HDatedit(*ymd) datfmt(*iso) FQPRINT O F 132 PRINTER OFLIND(*INOV) DCL-S WCLICLA PACKED(5:0); DCL-S WCLINOM CHAR(45); DCL-S WCLICEL CHAR(15); DCL-S WCLISEX CHAR(1); DCL-S CLIEMAIL CHAR(30); DCL-S WCLIESTD CHAR(1); DCL-S WCLIDEP PACKED(2:0); EXCEPT CABECERA; EXCEPT linea; /free exec sql DECLARE C1 CURSOR FOR SELECT CLICLAV, CLINOM, CLICEL, CLISEX, CLIEMAIL FROM CLIENTES ORDER BY CLICLAV; end-exec; /end-free
内容的提问来源于stack exchange,提问作者reymagnus
相关产品推荐
相关产品推荐

