Executando programas COBOL usando JCL

Compilando programas COBOL

Para executar um programa COBOL em modo batch usando JCL, o programa precisa ser compilado e um módulo de carregamento é criado com todos os subprogramas. O JCL usa o módulo de carregamento e não o programa real no momento da execução. As bibliotecas de carga são concatenadas e fornecidas ao JCL no momento da execução usandoJCLLIB ou STEPLIB.

Existem muitos utilitários de compilador de mainframe disponíveis para compilar um programa COBOL. Algumas empresas corporativas usam ferramentas de gerenciamento de mudanças, comoEndevor, que compila e armazena todas as versões do programa. Isso é útil para rastrear as alterações feitas no programa.

//COMPILE   JOB ,CLASS=6,MSGCLASS=X,NOTIFY=&SYSUID             
//*            
//STEP1     EXEC IGYCRCTL,PARM=RMODE,DYNAM,SSRANGE
//SYSIN     DD DSN=MYDATA.URMI.SOURCES(MYCOBB),DISP=SHR
//SYSLIB    DD DSN=MYDATA.URMI.COPYBOOK(MYCOPY),DISP=SHR
//SYSLMOD   DD DSN=MYDATA.URMI.LOAD(MYCOBB),DISP=SHR
//SYSPRINT  DD SYSOUT=*
//*

IGYCRCTL é um utilitário compilador IBM COBOL. As opções do compilador são passadas usando o parâmetro PARM. No exemplo acima, RMODE instrui o compilador a usar o modo de endereçamento relativo no programa. O programa COBOL é passado usando o parâmetro SYSIN e o copybook é a biblioteca usada pelo programa em SYSLIB.

Este JCL produz o módulo de carregamento do programa como saída que é usado como entrada para o JCL de execução.

Executando Programas COBOL

Abaixo um exemplo de JCL onde o programa MYPROG é executado usando o arquivo de entrada MYDATA.URMI.INPUT e produz dois arquivos de saída gravados no spool.

//COBBSTEP  JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10    EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB   DD DSN=MYDATA.URMI.LOADLIB,DISP=SHR
//INPUT1    DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*

O módulo de carregamento de MYPROG está localizado em MYDATA.URMI.LOADLIB. É importante observar que o JCL acima pode ser usado apenas para um módulo COBOL não-DB2.

Passando dados para programas COBOL

A entrada de dados para o programa em lote COBOL pode ser por meio de arquivos, parâmetro PARAM e instrução SYSIN DD. No exemplo acima:

  • Os registros de dados são passados ​​para MYPROG por meio do arquivo MYDATA.URMI.INPUT. Este arquivo será referido no programa usando o nome DD INPUT1. O arquivo pode ser aberto, lido e fechado no programa.

  • Os dados do parâmetro PARM ACCT5000 são recebidos na seção LINKAGE do programa MYPROG em uma variável definida dentro dessa seção.

  • Os dados na instrução SYSIN são recebidos por meio da instrução ACCEPT na divisão PROCEDURE do programa. Cada instrução ACCEPT lê um registro inteiro (isto é, CUST1 1000) em uma variável de armazenamento de trabalho definida no programa.

Executando um programa COBOL-DB2

Para executar o programa COBOL DB2, um utilitário IBM especializado é usado no JCL e no programa; A região do DB2 e os parâmetros necessários são passados ​​como entrada para o utilitário.

As etapas abaixo são seguidas na execução de um programa COBOL-DB2:

  • Quando um programa COBOL-DB2 é compilado, um DBRM (Módulo de Solicitação de Banco de Dados) é criado junto com o módulo de carregamento. O DBRM contém as instruções SQL dos programas COBOL com sua sintaxe verificada para estar correta.

  • O DBRM está vinculado à região do DB2 (ambiente) na qual o COBOL será executado. Isso pode ser feito usando o utilitário IKJEFT01 em um JCL.

  • Após a etapa de ligação, o programa COBOL-DB2 é executado usando IKJEFT01 (novamente) com a biblioteca de carregamento e a biblioteca DBRM como entrada para o JCL.

//STEP001  EXEC PGM=IKJEFT01
//*
//STEPLIB  DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
    DSN SYSTEM(SSID)
    RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
    LIB('MYDATA.URMI.LOADLIB')
    END
/*

No exemplo acima, MYCOBB é o programa COBOL-DB2 executado usando IKJEFT01. Observe que o nome do programa, o ID do subsistema do DB2 (SSID), o nome do plano do DB2 são transmitidos na instrução SYSTSIN DD. A biblioteca DBRM é especificada no STEPLIB.