Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SUMÁRIO
CAPÍTULO 1 – JOB CONTROL LANGUAGE.......................................................................................................2
1.1 DEFINIÇÃO ..................................................................................................................................................... 2
1.2 DESENHO DE UM JOB ..................................................................................................................................... 2
1.3 ESTRUTURA DE UM JOB ................................................................................................................................. 3
1.4 REGRAS PARA CONFECÇÃO DE UM JOB ......................................................................................................... 4
1.5PARÂMETROS ESPECIAIS ................................................................................................................................. 4
1.5.1 JOB – PARÂMETROS MAIS COMUNS ...................................................................................................... 4
1.5.2 EXEC ....................................................................................................................................................... 9
1.5.3 DD (DATA DEFINITION) ........................................................................................................................ 11
1.5 JOBLIB .......................................................................................................................................................... 19
1.6 STEPLIB ......................................................................................................................................................... 19
1.7 DDNAME X DSN(DSNAME) ........................................................................................................................... 20
1.7.1 DDNAME .............................................................................................................................................. 20
1.7.2 DSN (DSNAME) ..................................................................................................................................... 20
1.10 JCL ERROR X ABEND X FLUSH....................................................................................................................... 21
1.10.1 JCL ERROR .......................................................................................................................................... 21
1.10.2 ABEND ................................................................................................................................................ 21
1.10.3 FLUSH ................................................................................................................................................. 21
2.5 ARQUIVOS TEMPORÁRIOS ........................................................................................................................... 21
*****************************************************************........................................... 22
CAPÍTULO 3 – ABENDS SISTEMA OPERACIONAL .......................................................................................... 22
www.escoladeprogramadores.com.br 1
JCL – Formação Mainframe
1.1 DEFINIÇÃO
É a linguagem utilizada pelos mainframes para execução dos JOBs (Tarefas). Os JOBs solicitam
recursos (programas, arquivos, etc) ao Sistema Operacional para execução de programas.
Os JOBs são responsáveis por atualização de contas correntes, geração de contratos, emissão de
boletos e duplicatas, baixa de pagamentos e muitas outras tarefas em bancos, seguradoras e
financeiras.
JOB / JOBNAME
É a composição de uma série de programas (Cobol ou Utilitários) que devem ser processados numa
determinada sequência. Um job representa um conjunto de STEPs.
STEP / STEPNAME
É a execução de um programa Cobol ou um programa Utilitário.
JOBXX01D
STEP001 SORT
STEP002 COBXX01
STEP003 IDCAMS
STEP004 COBXX02
www.escoladeprogramadores.com.br 2
JCL – Formação Mainframe
O JOB JOBXX01D é formado por 4 STEPs. São eles : STEP001, STEP002, STEP003 e STEP004.
O STEP001 executa o programa Utilitário SORT.
O STEP002 executa o programa CobolCOBXX01.
O STEP003 executa o programa Utilitário IDCAMS.
O STEP004 executa o programa Cobol COBXX02.
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//JOBXX01D JOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
//********************************************************************
//* STEP001 - UTILITARIO SORT - ORDENA ARQUIVO POR DATA DE PAGAMENTO *
//********************************************************************
//STEP001 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=GR.TSYYXX.ARQPGTO,DISP=SHR
//SORTOUT DD DSN=GR.TSYYXX.ARQPGTO,DISP=SHR
//SYSIN DD *
SORT FIELDS=(01,08,CH,A)
//********************************************************************
//* STEP002 - PROGRAMA COBXX01 - GERACAO RELATORIO PAGAMENTOS *
//********************************************************************
//STEP002 EXEC PGM=COBXX01
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.TSYYXX.ARQPGTO,DISP=SHR
//RELATO DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//********************************************************************
//* STEP003 - UTILITARIO IDCAMS - DELECAO ARQUIVO ARQSERA *
//********************************************************************
//STEP003 EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE GR.ARQUIVO.ARQSERA
//********************************************************************
//* STEP004 - PROGRAMA COBXX02 - GERACAO ARQUIVO ARQSERA *
//********************************************************************
//STEP004 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.TSYYXX.ARQPGTO,DISP=SHR
//ARQSERA DD DSN=GR.TSYYXX.ARQSERA,
// DISP=(NEW,CATLG,DELETE),
// UNIT=3390,
// SPACE=(TRK,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=800,BLKSIZE=0)
www.escoladeprogramadores.com.br 3
JCL – Formação Mainframe
//SYSOUT DD SYSOUT=*
Visualizando o JOB anterior parece complexo o entendimento da linguagem JCL. Contudo, nos
próximos tópicos estaremos abordando todas as instruções utilizadas durante a confecção de um
JOB.
1.5PARÂMETROS ESPECIAIS
O JCL precisa de alguns parâmetros especiais para efetivar a execução dos JOBs.São eles :
JOB
EXEC
DD (Data Definition)
Exemplo :
JOBNAME
É o nome do JOB (JOBNAME).Em caso de falha no JOB a primeira a coisa a ser verificada é o
JOBNAME.Formado por 8 carácteres.
www.escoladeprogramadores.com.br 4
JCL – Formação Mainframe
Exemplo :
JOB
Todo JOB deve possuir a palavra reservada JOB. A palavra reservada JOB solicita ao Sistema
Operacional a execução de JOBs.
Exemplo :
//JOBXX01DJOB 'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
ACCOUNT INFORMATION
São as informações para geração de estatísticas. Essas informações são chamadas de ACCOUNT
INFORMATION. Normalmente, informa-se o nome da companhia, do departamento, do programador,
analista, etc.
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
CLASS
Define a classe de entrada dos JOBs. Existem 36 classes disponíveis. As classes disponíveis vão de
A-Z (26 classes) e de 0 a 9 (10 classes).
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
www.escoladeprogramadores.com.br 5
JCL – Formação Mainframe
MSGCLASS
Define a classe de saída dos JOBs. Existem 36 classes disponíveis. As classes disponíveis vão de
A-Z (26 classes) e de 0 a 9 (10 classes).
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
NOTIFY
Define o usuário que receberá as notificações dos JOBs executados. Se informado
NOTIFY=&SYSUID as notificações irão para o usuário que estiver logado no TSO.
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=&SYSUID,TIME=(0,20)
TIME
É o CPU TIME (Tempo de Processamento de Máquina). É o tempo necessário para que o JOB
termine a sua execução.
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(0,20)
Onde :
0 = (Quantidade em Minutos)
20 = (Quantidade em Segundos)
www.escoladeprogramadores.com.br 6
JCL – Formação Mainframe
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=(,20)
Onde :
20 = (Quantidade em Segundos)
Exemplo :
//JOBXX01DJOB'JOB-PRD',CLASS=C,MSGCLASS=X,NOTIFY=TSYYXX,TIME=5
Onde :
5 = (Quantidade em Minutos)
DICA 1 - IMPORTANTE !
DICA 2 - IMPORTANTE !
CPU TIME não é a quantidade de segundos corridos. O cálculo do CPU TIME depende de fatores
como : quantidade de base de dados a serem acessados, quantidade de instruções, quantidade de
jobs executando concorrentemente, entre outros fatores.
DICA 3 - IMPORTANTE !
O sistema operacional retorna o abend S322 quando existe estouro de CPU TIME. A causa mais
normal do abend S322 são programas em looping ou programas que fazem acessos a muitas bases
de dados.
www.escoladeprogramadores.com.br 7
JCL – Formação Mainframe
DICA 1 - IMPORTANTE !
www.escoladeprogramadores.com.br 8
JCL – Formação Mainframe
1.5.2 EXEC
Informa qual o programa, utilitário ou procedure será executado pelo STEP do JOB.
STEPNAME
É o nome do STEP (STEPNAME). Em caso de falha no JOB, a segunda a coisa a ser verificada é o
STEPNAME. Formado por até 8 carácteres.
Exemplo ( STEPNAME ) :
Execução de Utilitário :
Execução de Programa :
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//ARQPGTO DD DSN=GR.TSYYXX.ARQPGTO,DISP=SHR
//RELATO DD SYSOUT=*
//SYSOUT DD SYSOUT=*
Execução de Procedure :
JCLLIB
ORDER
www.escoladeprogramadores.com.br 10
JCL – Formação Mainframe
//JOBPROCS PROC
//*****************************************************************
//* STEP001 - EXECUTA PROGRAMA COBXX01 *
//*****************************************************************
//STEP001 EXEC PGM=COBXX01
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*****************************************************************
//* STEP002 – EXECUTA PROGRAMA COBXX02 *
//*****************************************************************
//STEP002 EXEC PGM=COBXX02
//STEPLIB DD DSN=GR.GERAL.LOADLIB,DISP=SHR
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
Pode ser :
Exemplo :
www.escoladeprogramadores.com.br 11
JCL – Formação Mainframe
//SYSOUT DD SYSOUT=*
* (ASTERICO)
Referencia dados de entrada para o programa que está sendo executado.
Exemplo :
DICA – IMPORTANTE !
SORT FIELDS=(01,08,CH,A)é passado como parâmetro para o programa que está sendo
executado. No nosso exemplo, o utilitário SORT.
www.escoladeprogramadores.com.br 12
JCL – Formação Mainframe
SYSOUT
Gera para o Sistema Operacional um DataSet com as saídas geradas pelo programa.
Exemplo :
DISP
Refere-se como o DataSet será disponibilizado para o sistema operacional.
[TERCEIRO PARÂMETRO]
TÉRMINO ANORMAL
[PRIMEIRO PARÂMETRO]
STATUS
DISP=(NEW,CATLG,DELETE)
[SEGUNDO PARÂMETRO]
TÉRMINO NORMAL
PARÂMETRO(s) DESCRIÇÃO
SHR Significa que o DataSetexiste e pode ser lido por outro recurso simultâneamente.
OLD Significa que o DataSetexiste e que o programa exige exclusividade na leitura.
NEW Criação de DataSet
MOD Modifica um DataSet sequencial. Acrescenta novos registros no final.
CATLG Cataloga o DataSet. Obviamente que esta opção deve estar sempre
acompanhada de NEW no primeiro sub-parâmetro. Porque se o DataSet estiver
sendo lido é porque já está catalogado.
UNCATLG Descataloga o DataSet. Evite usar sempre.
DELETE Delete o DataSet. Se precisar deletar o DataSet use sempre esta opção.
KEEP Mantem o DataSet do jeito que estava antes.
PASS Passa o DataSet para o próximo STEP do JOB.
www.escoladeprogramadores.com.br 13
JCL – Formação Mainframe
Exemplo :
Exemplo Inválido :
DISP=(NEW,KEEP,DELETE)
Como manter um DataSet, sendo que o DataSet nem foi criado ainda.
DEFAULT
Se você colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).
www.escoladeprogramadores.com.br 14
JCL – Formação Mainframe
www.escoladeprogramadores.com.br 15
JCL – Formação Mainframe
SPACE
Espaço físico a ser utilizado.
Onde :
5 = Alocação Primária
1 = Alocação Secundária
Exemplo :
ALOCAÇÃO SECUNDÁRIA
Pode ser extendida até 15 extends.
Logo, nessa alocação de DataSet teríamos no máximo 20 trilhas. Sendo 5 trilhas para alocação
primária e no máximo 15 para alocação secundária.
UNIT
Informa o tipo de dispositivo.
www.escoladeprogramadores.com.br 16
JCL – Formação Mainframe
Exemplo :
VOLUME
Informa qual volume dentro do DISCO deve ser referenciado.
Exemplo :
PR39X7
É o volume que está sendo referenciado
www.escoladeprogramadores.com.br 17
JCL – Formação Mainframe
Exemplo :
RECFM
Define o formato do arquivo
LRECL
Informa o tamanho do registro do arquivo. No nosso exemplo o tamanho do arquivo é 800 bytes.
BLKSIZE
Define a blocagem do arquivo. Isto é, quantos registros formam um bloco para acessar ao arquivo.
Deve ser sempre um múltiplo de LRECL ou 0(Zero). Se informado 0(Zero) a blocagem ideal é
calculada automaticamente.
www.escoladeprogramadores.com.br 18
JCL – Formação Mainframe
1.5 JOBLIB
É a biblioteca na qual todos os STEPs do JOB referenciarão para execução dos programas Cobol.
(Somente objetos, programas que foram compilados e linkeditados).
Exemplo :
1.6 STEPLIB
É a biblioteca na qual um determinado STEP referencia para a execução do programa COBOL.
Exemplo :
A STEPLIB sobrepõe a JOBLIB. Caso informado no JOB, as duas opções a STEPLIB prevalece
sobre a JOBLIB. Isto é, a STEPLIB sobrepõe (override) a JOBLIB.
IMPORTANTE
Caso no JOB não seja referenciado nem a JOBLIB e nem STEPLIB, nenhum programa Cobol
será executado.
www.escoladeprogramadores.com.br 19
JCL – Formação Mainframe
Exemplo :
DDNAMEs
ARQPGTO e ARQSERA são os DDNAMES desse STEP. Sendo ARQPGTO (Entrada) e
ARQSERA (Saída).
Exemplo :
www.escoladeprogramadores.com.br 20
JCL – Formação Mainframe
//SYSOUT DD SYSOUT=*
DSNAMEs
GR.TSYYXX.ARQPGTO e GR.TSYYXX.ARQSERA são os DSNAMES desse STEP. Sendo
ARQPGTO (Entrada) E ARQSERA (Saída).
1.10.2 ABEND
Representa falha na execução do STEP. O Sistema Operacional ou o programa retornam um código
de retorno ou código de ABEND no STEP.
O JOB é executado. O STEP é executado, porém existem uma falha na execução do STEP.
1.10.3 FLUSH
Significa que determinado STEP não foi executado. Normalmente ocorre o FLUSH no JOB quando
existe dependência entre os STEPs do JOB.
São DataSets que ficam disponíveis até que o JOB finalize. Podem ser criados, alterados ou
referenciados durante a execução do JOB. Utiliza-se dois && (ês comerciais), com tamanho de 1 a 8
carácteres para referenciar o DataSet.
Exemplo :
www.escoladeprogramadores.com.br 21
JCL – Formação Mainframe
S03B - O ERRO OCORREU NO OPEN PARA UM DATASET 'IS'. NENHUM REGISTRO FOI
PROCESSADO PORQUE:
. O ARQUIVO NAO FOI CRIADO OU NAO FOI FECHADO APOS A CRIACAO.
. A DCBRKP ESTA ERRADA OU O TAMANHO DA CHAVE = ZERO.
. O BLKSIZE E' MENOR QUE O LRECL OU NAO E' MULTIPLO DO MESMO.
. O LRECL E' IGUAL A ZERO OU E' DIFIRENTE DO LABEL DE CRIACAO.
. UM ARQUIVO DE SAIDA FOI GRAVADO COM DISP SHR E NAO OLD/NEW.
. O RECFM ESPECIFICADO NAO E' O MESMO DA CRIACAO.
. KEYLEN NAO DEVE SER ESPECIFICADO PARA DATASET'S EXISTENTES.
S03D - BLOCAGEM DE ARQUIVO ERRADA.
- CARTAO DCB SEM PARAMETROS.
- DSORG=IS E RKP=O.
. O ARQUIVO NAO FOI CRIADO OU NAO FOI FECHADO APOS A CRIACAO.
S0A8 - OCORREU ERRO DURANTE A EXECUCAO DE UM PROGRAMA DE APLICACAO VTAM
S0A9 - UM COMANDO 'HALF NET' OU 'CANCEL' OCORREU NUM MODULO 'VTAM'.
- VER CODIGOS DO REGISTRADOR 15 NO MANUAL.
S0BC - ERRO DE HARDWARE DURANTE A EXECUCAO DE UMA SUBROTINA DA 'READER'
OU DA 'WRITER'.
S0B0 - PROVAVEL ERRO DE HARDWARE NA 'JOB QUEUE' DO DATASET.
S0B6 - ERRO LOGICO NO SISTEMA QUANDO FOI ACESSADO 'JOB LIST' RESIDENTE
S0C0 - UM PROGRAMA OMITIDO FOI ENCONTRADO DURANTE A EXECUCAO.
S0C1 - NOME DOS ARQUIVOS (DD) ESTAO ERRADOS. (FILE STATUS 90).
- FALTAM OU ESTAO ERRADOS OS CARTOES DD.
- DCB (QUANDO PASSADO 2.BLP).
- ROTINA DE PROCESSAMENTO SEM LOGICA.
- ABRIR OU FECHAR MAIS DE UMA VEZ UM ARQUIVO.
- LEU OU GRAVOU ARQUIVO FECHADO - ERRO NO OPEN.
- TENTAR GRAVAR UM ARQUIVO INPUT.
- ARQUIVO DIFERE TAMANHO COM LRECL DO SEQSAI.
S0C2 - 'SYS.... DD MISING', INCLUIR A SYS... QUE ESTA FALTANDO.
- STOP RUN DENTRO DO SORT.
S0C3 - O OBJETO DE UM EXECUTE E' OUTRO EXECUTE.
- FALTA FECHAR ARQUIVO OU TESTE APOS FECHAR ARQUIVO.
- TESTE EM CAMPOS DA FD APOS DAR CLOSE NO ARQUIVO.
S0C4 - ERRO DE PROGRAMA. PROVAVELMENTE 'LOOPING' EM ALGUMA INDEXACAO.
- FALTA CARTAO DD.
- VERIFICAR SE NAO FALTA PARAMETRO EM ALGUM 'CALL'.
- DISPLAY NO PROGRAMA SEM CARTAO SYSOUT.
- ACCEPT NO PROGRAMA SEM CARTAO SYSIN.
- ERRO DE ENDERECAMENTO (ESTOURO NA TABELA).
- MANUSEIO DE CAMPOS COM O ARQUIVO FECHADO.
- MOVER PARA AREA DE SORT ANTES DE DAR O COMANDO SORT.
- USO DA LINKAGE SEM DAR ENTRY OU USING NA PROCEDURE.
- MOVER CAMPOS PARA SORT INTERNO APOS O FIM DO OUTPUT.
DEVICE.
S422 - FALTOU QUEUE. EXCESSO DE CARTOES DD NO JOB.
- ESPACO EXIGIDO PELO JOB NA QUEUE E' MUITO GRANDE PARA INICIAR.
S42A - PROGRAMA DE CONTROLE ACHOU UM PARAMETRO 'LIST' CRIADO NA ROTINA
'EXIT' NA INSTRUCAO MACRO 'DEQ' ANTERIORMENTE PEDIDA NA MESMA
TASK, MAS AINDA NAO RECEBEU O CONTROLE DA ROTINA.
S42D - ENDERECO DA 'DCB' NAO ESTA NA MEMORIA.
S482 - ABEND DO SISTEMA. SUBMETA NOVAMENTE.
S4FE - IDEM AO 'S3FE', SO QUE A 'TASK' NAO E' DE TELEPROCESSAMENTO.
S506 - REDUZA O TAMANHO DE ENTRADA DO PROGRAMA OU DO SEGMENTO DE
'OVERLAY'.
S513 - ERRO NA ABERTURA DE UM DATASET EM FITA. REPROCESSAR.
S514 - ERRO DE FECHAMENTO DE UM ARQUIVO CAUSADO POR VOLUME OU DEVICE
DEFEITUOSO.
S522 - 'TIME' DE MAQUINA. (PROVAVEL LOOP).
- OUTLIM DEFAULT ATINGIDO.
- ESPERA DE RESPOSTA P/ MONTAGEM DO ARQUIVO NAO ATINGIDA.
S604 - O ENDERECO PEDIDO ESTA FORA DA MEMORIA VIRTUAL PEDIDA NA 'TASK'
S605 - ENDERECO DE ALOCACAO FORA DOS LIMITES DA MEMORIA VIRTUAL.
S606 - REDUZA O TAMANHO DE ENTRADA DO PROGRAMA OU DO SEGMENTO DE 'OVER
LAY'. ACRESCENTE O TAMANHO DA REGIAO NO CARTAO EXEC.
S60A - ESPECIFICACAO INVALIDA DE UMA AREA A SER LIBERADA.
S613 - ERRO OCORREU DURANTE A EXECUCAO DE INSTRUCAO DE 'OPEN' PARA
ARQUIVO EM FITA.
- 04-08-10-14 - ERRO DE POSICIONAMENTO DE LEITURA/GRAVACAO.
REPROCESSAR.
S614 - ERRO DE FECHAMENTO DE ARQUIVO CAUSADO POR VOLUME OU DEVICE
DEFEITUOSO.
S637 - ERRO OCORREU DURANTE O FIM DE VOLUME EM UMA CONCATENACAO
DE ARQUIVOS.
- 0C - CONCATENACAO DE ARQUIVOS COM DIFERENCA DE ATRIBUTOS NAO
ESPECIFICADOS NA 'DCB' FOI DETECTADO
- SORT COM DD CONCATENADOS. OS ARQUIVOS DEVEM ESTAR EM UM MESMO
TIPO DE UNIDADE.
- DEMAIS CODIGOS REPROCESSAR.
S706 - ERRO DE PROGRAMA ENCONTRADO PELO 'LINKAGE-EDITOR' NO MODULO
DE CARGA.
S713 - DATA DE EXPIRACAO DE UM ARQUIVO NAO ENCONTRADA.
S714 - ERRO OCORREU DURANTE A EXECUCAO DE UM 'CLOSE' PARA ARQUIVO EM
FITA.
- ERRO DURANTE GRAVACAO DE 'TRAILER-LABEL' OU 'TAPE-MARK'.
REPROCESSAR.
S717 - IDEM AO 'S417'.
S722 - 'OUTLIM' ESPECIFICADO NA 'SYSOUT' ATINGIDO.
S737 - PROBLEMAS COM 'SPACE'. AUMENTAR / OU / OVERRIDE EM EXCESSO.
S804 - FALTA O PARAMETRO REGION NOS CARTOES JOB OU EXEC, OU A
QUANTIDADE ESPECIFICADA E' PEQUENA.
- QUANDO BLOCO E' IGUAL A 0 E BLKSIZE DA DCB MUITO GRANDE.
S806 - MODULO OU PROGRAMA INDICADO NO CARTAO EXEC NAO ENCONTRADO.
S80A - IDEM AO 'S804'.
S813 - ERRO DE 'OPEN' PARA ARQUIVO EM FITA. CHECAR 'DSN' DO JCL COM
LABEL. COLOCAR 'DSN' E GERACAO CORRETOS.
- LABEL DA FITA NAO COMBINA COM A DESCRITA NO PGM.
- LABEL DA FITA DESTRUIDO.
S814 - FALTA PARAMETRO 'REGION' NOS CARTOES JOB OU EXEC, OU ENTAO
www.escoladeprogramadores.com.br 27
JCL – Formação Mainframe
www.escoladeprogramadores.com.br 29