Académique Documents
Professionnel Documents
Culture Documents
DEFINIÇÃO DE UM JOB
Pág: 2
//XXXXXXX.....EXEC XXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXX DD XXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXX.....DD XXXXXXXXXXXXXXXXXXXXXXX
//
Fig. 02
Repare: temos neste exemplo um Job composto de 4 steps. Estes steps podem
ser programas ‘caseiros’ e/ou utilitários (como o SORT e o IDCAMS) que serão
visto adiante.
Voltando a fig.01 poderá muito bem ser a seqüência 01 tendo um SORT entre os
programas PROG003 e PROG009. Neste caso o PROG003 gerou um arquivo a
ser lido pelo PROG009. Mas antes de utilizar, o PROG009 precisa reclassificar o
arquivo para atender sua regra de negócio.
A FUNÇÃO DO J.C.L.
EXEMPLO DE J.C.L.
Pág: 3
// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),
// DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)
//RELATO DD SYSOUT=(R,,XPTO)
//
Fig.03
Neste exemplo temos um job com 2 steps apenas que irá executar um programa
chamado ‘MYPROGRSS’ , e terá 2 arquivos de entrada sendo o primeiro em disco
chamado pelo DDNAME ENTR01 e um parâmetro chamado PARM01 E uma
saída chamado pelo DDNAME SAIDA02.
Um outro step irá executar o programa MYPROGXX, que irá ler 2 arquivos e gerar
um terceiro arquivo em GDG.
Pág: 4
-Dentro de cada cartão EXEC teremos cartões ‘DD’ que irão disponibilizar os
dispositivos necessários para o funcionamento do programa.
•Não se esqueça que JCL é uma série de comandos que você está passando
para o sistema operacional ‘entender’ o seu programa, como se fossem
parâmetros.
•JAMAIS confunda JCL ERROR com ABEND. O primeiro é erro de sintaxe ou
indisponibilidade de recursos. O segundo é falha de programa que em
alguns casos pode até mesmo ser causado por recursos do sistema.
•Em caso de erro de JCL, o programa em questão não foi executado.
•Os cartões ‘//’ nas colunas 1 e 2 são obrigatórios em todo o JCL, exceto se
houver algum parâmetro a ser passado pelo usuário (opção) ao programa.
(Veja regra 6)
•Existem parâmetros obrigatórios e parâmetros opcionais.
•Com exceção do Account e programer-name do cartão Job, todos os outros
parâmetros possuem o sinal ‘=’. O parâmetros vêm a esquerda e os sub-
parâmetros á direita do sinal.]
•Os sub-parâmetros podem ser 1 ou mais de 1. Quando houver mais de 1 sub-
parâmetro deverá estar entre aspas.
•Se o seu programa tem opção de processamento (ex: listagem total ou
parcial), este opção (que na verdade também é um parâmetro), este poderá
ser ‘passado’ após um cartão DD que contenha o comando ‘DD *’.
•Ao começar numa empresa peça sempre uma cópia da padronização da
empresa. Nem sempre você poder ‘batizar’ seu programa, jobname,
stepname etc com o nome que você quer. Existem regras, com certeza.
Pág: 5
CARTÃO JOB
Regra: Deverá ter de 1 a 8 caracteres (em geral sempre 8), sendo o primeiro
alfabético.
JOB – Nome do cartão de comando – Obrigatório. Sempre entre espaços em
branco.
‘(9983,98,978,09)’: Informe-se com a produção pois isto varia de empresa para
empresa. Pode nem ser obrigatório. Mas se for, deverá ser sempre o primeiro
após o JOB.
‘ANTONIO’ – Programer-name. Obrigatório. Para identificar o nome do usuário.
Se não houver account, vem logo após o comando JOB.
CLASS=Define a classe que será submetida na fila de JOBS.
MSGCLASS=Define a classe de sysout (relatório) onde serão geradas todas as
logs durante o tempo em que o job permanecer no sistema.
MSGLEVEL=(x,y) Define o nível das mensagens que serão exibidas após a
execução do JOB.
• O parâmetro X pode assumir os valores 0, 1 ou 2
• O parâmetro Y pode assumir os valores 0 ou 1
TYPERUN=HOLD|SCAN
Outros parâmetros usados poderão ser requeridos na empresa, mas não são
obrigatório no cartão JOB, tais como TYPRUN, NOTIFY e outros.
O CARTÃO EXEC
PROCEDURE CATALOGADA
Pág: 6
Antes:
DEPOIS:
O job (chamada) vai executar uma procedure chamada UP01P04 que está na
biblioteca padrão do sistema. Os parâmetros podem ser passados pelo JOB ou
pelo cartão PROC.
A PROCEDURA CATALOGADA
Pág: 7
//ENTR04 DD DSN=&CLIENTE..GPALU99.&SAIDA,DISP=SHR
//SAIDA03 DD
// DSN=&CLIENTE..GPALU99.CADSAI(+1),
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),
// DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)
//RELATO DD SYSOUT=(R,,XPTO)
Sintaxe:
//STEP0101 EXEC PGM=MYPROGXX,PARM=’900512’,COND=(0,NE)
O CARTÃO DD
Sintaxe:
Pág: 8
//ENTR01 DD DSN=GP.GPALU99.CADCLI,DISP=SHR
//SAIDA02 DD DSN=GP.GPALU99.CADENT,DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
DDNAME = (ENTR01) Tem que ser o mesmo que você especificou na select do
seu programa. Confira sempre a padronização na sua instalação.
DD = É o nome do cartão-comando.
DSN = Parâmetro que irá dizer ao sistema qual o nome externo do arquivo em
questão. Lembre-se que neste caso você está associando ENTRO1 ao arquivo
UP0014.UP0.CADCLI e SAIDA02 ao arquivo UP0014.UP0.CADENT. O nome
externo é o nome que o sistema conhece o arquivo.
DISP=(NEW,CATLG,CATLG)
DISP=(SHR,UNCTLG,UNCTLG)
DISP=(OLD,DELETE,DELETE)
......DISP=(NEW,KEEP,KEEP)
SHR ---> Significa que o arquivo já existe e pode ser lido por outro recurso
simultâneamente.
OLD ---->Significa que o arquivo já existe e que o programa exige exclusividade
na leitura.
NEW ---->Arquivo novo, a ser criado neste momento.
CATLG --> Catalogue o arquivo. Óbviamente que esta opção deve estar sempre
acompanhada de NEW no primeiro sub-parâmetro. Porque se o arquivo estiver
sendo lido é porque já está catalogado.
UNCATLG --> Descatalogue o arquivo. Evite usar sempre.
DELETE ---> Delete o arquivo. Se precisar deletar o arquivo use sempre esta
opção.
KEEP ---> Mantenha o arquivo do jeito que intacto (do que jeito que estava antes).
LEMBRETES:
Pág: 9
-Se o arquivo é de entrada(OLD ou SHR) não precisa especificar demais
parâmetros, pois óbviamente já está catalogado e o sistema saberá
encontrá-lo. Se for de saída você deverá usar os demais parâmetros do
exemplo ENTR02.
Exemplos inválidos:
(SHR,CATLG,DELETE) ---> Se o arquivo é novo (SHR) como irá catalogar se já
está catalogado ? O sistema não recataloga.
(NEW,KEEP,DELETE) ---> Como manter um arquivo que ainda não existe ?
Default:
Se você colocar apenas DISP=SHR o sistema assume (SHR,KEEP,KEEP).
Outros sub-parâmetros:
SPACE= ----> Espaço a ser utilizado. Lembre-se que não precisa ser preciso, mas
quanto mais preciso melhor. É uma estimativa. O sistema irá checar se há
disponibilidade para gravar seu arquivo. Se não houver, cancelará.
Sintaxe: SPACE=(TRK,(5,2),RLSE).
DCB= ---> Indica o formato do arquivo a ser gravado. Não necessário para
arquivos a serem lidos, pois o catálogo guarda esta informações.
Sintaxe:
DCB=(RECFM=FB,LRECL=98,BLKSIZE=0)
Obs.: A ordem dos sub-parâmetros não é obrigatória.
Neste exemplo:
Indica que o arquivo é FB (fixo blocado). Confira que o seu programa possui as
cláusulas 'BLOCK 0' e 'RECORD FORMAT IS FIXED'. Outras opções possíveis:
Pág: 10
VB (variável blocado), FBA (fix blocado com caracter de impressão) e F (fixo sem
blocagem. EVITE sempre) e PO (particionado)
O tamanho do registro é 98. Se fosse variável deveria ser o tamanho do maior
registro + 4.
BLKSIZE= ---> Blocagem do registro. É o maior número de bytes trazidos para a
memória de uma só vez. É sempre uma quantidade próxima de 32.000. Deixe
sempre com '0', pois o sistema calcula automáticamente a blocagem ideal.
SYSOUT= ---> Este cartão tem finalidade definir a classe em que o relatório será
impresso. Como as empresas sempre tem mais que uma impressora, diversos
recebedores, diversos tipos de formulários estas informações serão de utilizadas
para fazer estas definições. Neste exemplo o relatório será emitida na classe 5
com tipo de formulário XPTO, que pode ser por exemplo uma fatura.
DDs ESPECIAIS
OUTRO EXEMPLO:
Pág: 11
//JOBLIB DD DSN=UPNGO.LOADLIB,DISP=SHR
CONCATENAÇÃO DE ARQUIVOS
Imagine que você tenha um arquivo de entrada que por um motivo qualquer não
foi processado anteriormente. Ex.: ontem o pessoal da contabilidade não
conseguiu enviar o movimento e por isso o processamento de fluxo de caixa não
foi processado. Neste momento você já poderá processar o job, só que agora
você tem dois arquivos de entrada. O que fazer ? Executar o job duas vezes, uma
para cada arquivo ? Não necessariamente. Você poderá concatenar os dois
arquivos e fazer um só processamento. Veja abaixo.
-Não se esqueça que JCL é uma série de comandos que você está passando para
o sistema operacional ‘entender’ o seu programa, como se fossem parâmetros.
Pág: 12
-JAMAIS confunda JCL ERROR com ABEND. O primeiro é erro de sintaxe ou
indisponibilidade de recursos. O segundo é falha de programa que em alguns caso
pode até mesmo ser causado por recursos do sistema.
-Em caso de erro de JCL, o programa em questão não foi executado.
-Os cartões ‘//’ nas colunas 1 e 2 são obrigatórios em todo o JCL, exceto se
houver algum parâmetro a ser passado pelo usuário (opção) ao programa. (Veja
regra 6)
-Existem parâmetros obrigatórios e parâmetros opcionais.
-Com exceção do Account e programer-name do cartão Job, todos os outros
parâmetros possuem o sinal ‘=’. O parâmetros vêm a esquerda e os sub-
parâmetros á direita do sinal.
-Os sub-parâmetros podem ser 1 ou mais de 1. Quando houver mais de 1 sub-
parâmetro deverá estar entre aspas.
-Se o seu programa tem opção de processamento (ex: listagem total ou parcial),
este opção (que na verdade também é um parâmetro), este poderá ser ‘passado’
após um cartão DD que contenha o comando ‘DD *’.
-Ao começar numa empresa peça sempre uma cópia da padronização da
empresa. Nem sempre você poder ‘batizar’ seu programa, jobname, stepname etc
com o nome que você quer. Existem regras, com certeza
-Assim como no programa, a identação no JCL também é muito importante.
-Nunca deixe de inserir comentário sucinto sobre a finalidade do programa que
você está passando para a produção.
-Para inserir um comentário, basta colocar ‘//*’ nas colunas 1 a 3, ao invés de
simplesmente ‘//’.
-Quando o comando não cabe na mesma linha, deve-se colocar uma vírgula após
o último parâmetro e continuar na linha de baixo, sempre começando com ‘//’ mas
sem cardname.
Pág: 13
OUTROS PARÂMETROS:
-Para se forçar a leitura de um arquivo num determinado dispositivo, como por
exemplo uma fita vinda de cliente externo que não consta no catálogo, ou um
arquivo que está na VTOC de um disco mas não no catálogo, usamos VOL=SER=
Modelo: //ENTRADA DD
DSN=GP.GPALU99.ALUNOS,DISP=SHR,VOL=SER=R00134
-Quando não queremos catalogar um arquivo e usar um arquivo temporário,
usamos no DSNAME o simbolo ‘&&’ antes do nome. O arquivo será deletado, logo
após a execução. Não se recomenda esta utilização. Ex.:
Modelo:
//SAIDA03 DD DSN=&&CADSAI,DISP=(NEW,PASS),
// UNIT=SYSDA,SPACE=(TRK,(5,1),RLSE),
// DCB=(GDG,RECFM=FB,LRECL=120,BLKSIZE=0)
Pág: 14
IF/THEN/ELSE/ENDIF
Sintaxe:
expressão relacional 1
GT
LT
NG
NL [AND]
[step.]RC EQ valor expressão 2 ... expressão n
NE [OR]
GE
LE
[step.]ABEND
[step.]RUN
Exemplo:
Pág: 15
outros exemplos:
Pág: 16
Utilitários
Exemplo:
//GPAE99EX JOB
//CONSTROI EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=A
//SYSIN DD DUMMY
//SYSUT1 DD *
JOAO PAULO 53AF 87 5701, 23 DE MAIO
ANTONIO JOSE 78AF 34 320, SÃO BENTO
/*
//SYSUT2 DD DSN=GP.GPAE99.TEST,UNIT=SYSALLDA,
// SPACE=(TRK,(1,1)),DISP=(NEW,CATLG),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
Exemplo:
//GPAE99EX JOB
//STEPALOC EXEC PGM=IEFBR14
//VKSDS1 DD
DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(,CATLG,DELETE),
// SPACE=(CYL,(10,10)),DCB=(LRECL=100,RECFM=F)
//*
//STEPDEL EXEC PGM=IEFBR14
Pág: 17
//VKSDS1 DD
DSN=DSVAABVS.LSG.A889.ALBERTO,DISP=(OLD,DELETE),
// SPACE=(CYL,(10,10)),DCB=(LRECL=100,RECFM=F)
Pág: 18
Exercício de fixação – comando JOB e comando EXEC
Pág: 19
Exercício de fixação – parâmetro COND, comandos DD e
utilitários IEFBR14 e IEBGENER
Executar em classe A;
Enviar mensagens de execução para classe X (exibir sempre todos os
níveis de mensagens);
Notificar o usuário do TSO sobre o termino da execução.
PASSO1
PASSO2
PASSO 3
PASSO 4
Pág: 20
Exercício de fixação – comando IF
Criar como JOB03 uma cópia do JOB02 e substituir o uso do COND pelo
comando IF.
Pág: 21