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

带顺序文件的COBOL程序编译报0012错误,求排查解决

COBOL顺序文件程序编译报错(0012错误)排查与修复

问题概述

在大型机环境下编写的包含顺序文件操作的COBOL程序,使用指定JCL编译时返回0012错误,编译日志中出现IKF1157I-E、IKF4052I-E等多个报错;但仅包含DISPLAY语句的简单COBOL程序可正常编译。

COBOL程序代码

IDENTIFICATION DIVISION.                                           
       PROGRAM-ID. TEST2.                                                 
       ENVIRONMENT DIVISION.                                              
       INPUT-OUTPUT SECTION.                                              
       FILE-CONTROL.                                                      
           SELECT DATOS ASSIGN TO INPUTFL.                                
       DATA DIVISION.                                                     
       FILE SECTION.                                                      
       FD DATOS.                                                          
          01  REG-DAT.                                                    
              05  ID-LB           PIC 9(10).                              
              05  TITULO          PIC X(16).                              
              05  GEN-1           PIC X(8).                               
              05  GEN-2           PIC X(11).                              
              05  STOCK           PIC 99.                                 
              05  FILLER          PIC X(33).                              
       WORKING-STORAGE SECTION.                                           
           01  FIN      PIC X VALUE 'N'.                                  
       PROCEDURE DIVISION.                                                
       1000-ABRIR.                                                        
           OPEN INPUT DATOS                                              
                PERFORM 2000-LEER UNTIL FIN = 'S'                        
           CLOSE DATOS                                                   
           STOP RUN.                                                     
       2000-LEER.                                                        
           READ DATOS                                                    
                AT END MOVE 'S' TO FIN                                   
                NOT AT END PERFORM 2100-MOSTRAR.                                                     
       2100-MOSTRAR.                                                     
           DISPLAY 'ID LIBRO: ' ID-LB.                                   
           DISPLAY 'TITULO: ' TITULO.                                    
           DISPLAY 'GENERO PRINCIPAL: ' GEN-1.                           
           DISPLAY 'GENERO SECUNDARIO: ' GEN-2.                          
           DISPLAY 'STOCK: ' STOCK.                                      
           DISPLAY '--------------------------------'.                              

JCL代码

//HERC0101 JOB (COBOL),                                               
//             'COBOL COMPILATION',                                   
//             CLASS=A,                                               
//             MSGCLASS=H,                                            
//             REGION=8M,TIME=1440,                                   
//             NOTIFY=HERC01,                                         
//             MSGLEVEL=(1,1)                                         
//****************************************************************** 
//*                                                                 
//* THIS JOB HAS AS PURPOSE COMPILE THE COBOL CODE                    
//* PROCEDURE LOCATED @ SYS2.PROCLIB(COBOL)                           
//*                                                                 
//****************************************************************** 
//COMPILE  EXEC COBOL,                                                
//         PROG='TEST2',                                              
//         PDSF='MBVT.APPLICBC.SRC',                                  
//         PDSL='MBVT.APPLICBC.LOAD'                                  
/*                                                                    
//                                                                    

编译报错日志(中文翻译)

6      IKF1155I-W     系统名中的设备类别无效,跳至下一个字段
 6      IKF1141I-W     系统名中的文件组织字段无效,将采用顺序组织
 6      IKF1157I-E     系统名中缺少外部名称
 6      IKF2133I-W     缺少LABEL RECORDS子句,将采用DD卡选项
27      IKF4052I-E     NOT 不能作为字母数字字面量的目标字段,已丢弃该语句
27      IKF4052I-E     AT 不能作为字母数字字面量的目标字段,已丢弃该语句
27      IKF4052I-E     END 不能作为字母数字字面量的目标字段,已丢弃该语句
28      IKF4072I-W     在过程名结束前已假设从被执行过程退出

错误分析与修复方案

1. 核心语法错误(IKF4052I-E)

第27行的READ语句格式不符合COBOL标准:原代码使用NOT AT END的写法错误,COBOL中需用ELSE来关联非AT END的逻辑。编译器误将NOT、AT、END识别为变量,导致报错。

修复后的READ语句:

2000-LEER.                                                        
           READ DATOS                                                    
               AT END 
                   MOVE 'S' TO FIN                                   
               ELSE 
                   PERFORM 2100-MOSTRAR.

2. 文件控制子句缺失(IKF1157I-E及相关警告)

FILE-CONTROL段缺少必要的文件属性声明,导致编译器无法识别文件组织方式、标签记录等信息。

修复后的FILE-CONTROL段:

FILE-CONTROL.                                                      
           SELECT DATOS ASSIGN TO INPUTFL
               ORGANIZATION IS SEQUENTIAL
               LABEL RECORDS ARE STANDARD.

补充ORGANIZATION IS SEQUENTIAL明确文件为顺序组织,LABEL RECORDS ARE STANDARD指定标签记录类型,解决设备类别、外部名称相关的错误和警告。

3. 其他警告处理

IKF2133I-W(缺少LABEL RECORDS子句)和IKF4072I-W(流程退出假设)会随着上述两项修复自动解决,因为语法修正后编译器能正确解析程序逻辑。


内容的提问来源于stack exchange,提问作者Juan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:22:36