You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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                

问题原因及解决方法

  1. 使用正确的编译命令
    嵌入SQL的RPGLE程序不能用普通的CRTRPGLE命令编译,必须使用CRTSQLRPGI命令——该命令会先完成SQL语句的预处理,再编译RPGLE代码。在PUB400环境中,编译时要选择这个命令,或者在源成员的编译选项中指定SQL预处理。

  2. 修正固定格式SQL行的位置
    固定格式RPGLE对SQL嵌入指令的列位置有严格要求:

    • C/EXEC SQL 必须从代码的第6列开始(即固定格式中标记为C的列位置)
    • 后续的C+续行也必须从第6列开始,SQL语句本身从第7列往后编写
      检查你的代码行位置,确保这些指令的列位置符合要求。
  3. 推荐改用自由格式代码(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:52:57