Você está na página 1de 84

Autor

JCL
José Italo Silvestrin
IBM Global Services
Italos@br.ibm.com
Fone: (019) 3887-8190

(Job Control Language)


1 Introdução 6
1.1 Observações 6
2 Generalidades 7
2.1 Como se monta um job? 7
2.2 O Processamento do Job 8
2.3 Campos de JCL Statement 9
2.4 Campos de Statements de JES2 9
2.5 Continuação de Statements (JCL e JES2) 10
2.6 Sintaxe de Parâmetros 10
2.7 Backward References 10
2.7.1 Exemplos de Backward References 11
2.8 Procedure In-stream 12
2.9 Procedure Catalogada 12
2.10 Modificando Procedures 12
2.10.1 Simbólicos 13
2.10.2 Override 13
2.11 O JCL na listagem 13
2.12 Started Tasks 14
3 Statements de JCL 15
3.1 Statement COMMAND 15
3.1.1 Exemplos 15
3.2 Statement Comentário 15
3.2.1 Exemplo 16
3.3 Statement CNTL 16
3.3.1 Exemplo 16
3.4 Statement DD 17
3.4.1 Parâmetro Asterisco (*) 18
3.4.1.1 Exemplo 18
3.4.2 Parâmetro AMP 18
3.4.2.1 Exemplo 20
3.4.3 Parâmetro AVGREC 20
3.4.3.1 Exemplo 21
3.4.4 Parâmetro BLKSIZE 21
3.4.4.1 Exemplos 21
3.4.5 Parâmetro CHKPT 22
3.4.5.1 Exemplos 22
3.4.6 Parâmetro CNTL 22
3.4.6.1 Exemplos 22
3.4.7 Parâmetro COPIES 23
3.4.7.1 Exemplos 23
3.4.8 Parâmetro DATA 23
3.4.9 Parâmetro DATACLAS 24
3.4.9.1 Exemplo 24
3.4.10 Parâmetro DCB 25
3.4.10.1 Exemplos 26
3.4.11 Parâmetro DDNAME 27
3.4.11.1 Exemplo 27
3.4.12 Parâmetro DEST 28
3.4.12.1 Exemplo 28
3.4.13 Parâmetro DISP 28
3.4.13.1 Exemplos 29
3.4.14 Parâmetro DLM 30
3.4.14.1 Exemplo 30
3.4.15 Parâmetro DSNAME 30
3.4.15.1 Exemplos 31
3.4.16 Parâmetro DUMMY 32
3.4.16.1 Exemplo 32
3.4.17 Parâmetro EXPDT 32
3.4.18 Exemplos 33
3.4.19 Parâmetro FREE 33
3.4.19.1 Exemplos 33
3.4.20 Parâmetro HOLD 33
3.4.20.1 Exemplos 34
3.4.21 Parâmetro LABEL 34
3.4.21.1 Exemplos 35
3.4.22 Parâmetro LIKE 35
3.4.22.1 Exemplo 36
3.4.23 Parâmetro LRECL 36
3.4.23.1 Exemplos 36
3.4.24 Parâmetro MGMTCLAS 36
3.4.24.1 Exemplo 37
3.4.25 Parâmetro OUTPUT 37
3.4.25.1 Exemplo 37
3.4.26 Parâmetro PROTECT 38
3.4.26.1 Exemplo 38
3.4.27 Parâmetro RECFM 38
3.4.27.1 Exemplo 38
3.4.28 Parâmetro RETPD 39
3.4.28.1 Exemplo 39
3.4.29 Parâmetro SPACE 39
3.4.29.1 Exemplos 40
3.4.30 Parâmetro SPIN 41
3.4.30.1 Exemplo 41
3.4.31 Parâmetro STORCLAS 41
3.4.31.1 Exemplo 42
3.4.32 Parâmetro SYSOUT 42
3.4.32.1 Exemplos 42
3.4.33 Parâmetro UNIT 43
3.4.33.1 Exemplos 43
3.4.34 Parâmetro VOLUME 44
3.4.34.1 Exemplos 45
4 Statements DD especiais 47
4.1.1 JOBCAT 47
4.1.1.1 Exemplo 47
4.1.2 JOBLIB 47
4.1.2.1 Exemplo 47
4.1.3 STEPCAT 47
4.1.3.1 Exemplo 48
4.1.4 STEPLIB 48
4.1.4.1 Exemplo 48
4.1.5 SYSABEND, SYSMDUMP e SYSUDUMP 48
4.1.5.1 Exemplos 49
4.1.6 SYSCHK 49
4.1.6.1 Exemplo 49
4.1.7 SYSIN 49
4.1.7.1 Exemplo 49
4.1 Statement ENDCNTL 50
4.1.1.1 Exemplo 50
4.2 Statement EXEC 50
4.2.1.1 Exemplos 51
4.2.1 Parâmetro ACCT 51
4.2.1.1 Exemplos 51
4.2.2 Parâmetro ADDRSPC 52
4.2.2.1 Exemplos 52
4.2.3 Parâmetro COND 52
4.2.3.1 Exemplos 53
4.2.4 Parâmetro PARM 54
4.2.4.1 Exemplo 54
4.2.5 Parâmetro PERFORM 54
4.2.5.1 Exemplo 55
4.2.6 Parâmetro PGM 55
4.2.6.1 Exemplos 55
4.2.7 Parâmetro PROC 56
4.2.7.1 Exemplos 56
4.2.8 Parâmetro REGION 56
4.2.8.1 Exemplos 57
4.2.9 Parâmetro TIME 57
4.2.9.1 Exemplos 58
4.3 Statements IF/THEN/ELSE/ENDIF 58
4.3.1.1 Exemplos 60
4.4 Statement INCLUDE 61
4.4.1.1 Exemplos 61
4.5 Statement JCLLIB 62
4.5.1.1 Exemplos 63
4.6 Statement JOB 63
4.6.1 Parâmetro de Accounting Information 63
4.6.1.1 Exemplos 64
4.6.2 Parâmetro ADDRSPC 65
4.6.2.1 Exemplos 65
4.6.3 Parâmetro CLASS 65
4.6.3.1 Exemplo 65
4.6.4 Parâmetro COND 66
4.6.4.1 Exemplos 66
4.6.5 Parâmetro MSGCLASS 66
4.6.5.1 Exemplos 67
4.6.6 Parâmetro MSGLEVEL 67
4.6.6.1 Exemplos 67
4.6.7 Parâmetro NOTIFY 68
4.6.7.1 Exemplos 68
4.6.8 Parâmetro PASSWORD 68
4.6.8.1 Exemplos 69
4.6.9 Parâmetro Nome do Programador 69
4.6.9.1 Exemplos 69
4.6.10 Parâmetro PRTY 69
4.6.10.1 Exemplo 70
4.6.11 Parâmetro REGION 70
4.6.11.1 Exemplo 70
4.6.12 Parâmetro RESTART 70
4.6.12.1 Exemplos 71
4.6.13 Parâmetro TIME 71
4.6.13.1 Exemplos 71
4.6.14 Parâmetro TYPRUN 72
4.6.14.1 Exemplo 72
4.6.15 Parâmetro USER 72
4.6.15.1 Exemplo 72
4.7 Statement OUTPUT 73
4.7.1 Parâmetro ADDRESS 73
4.7.1.1 Exemplo 73
4.7.2 Parâmetro BUILDING 74
4.7.2.1 Exemplo 74
4.7.3 Parâmetro CLASS 74
4.7.3.1 Exemplos 74
4.7.4 Parâmetro CONTROL 75
4.7.4.1 Exemplo 75
4.7.5 Parâmetro COPIES 75
4.7.5.1 Exemplos 76
4.7.6 Parâmetro DEFAULT 76
4.7.7 Parâmetro DEPT 77
4.7.7.1 Exemplo 77
4.7.8 Parâmetro DEST 77
4.7.8.1 Exemplos 78
4.7.9 Parâmetro DUPLEX 78
4.7.9.1 Exemplo 78
4.7.10 Parâmetro LINECT 78
4.7.10.1 Exemplo 78
4.7.11 Parâmetro NAME 78
4.7.11.1 Exemplo 79
4.7.12 Parâmetro PRTY 79
4.7.12.1 Exemplo 79
4.7.13 Parâmetro ROOM 79
4.7.13.1 Exemplo 79
4.7.14 Parâmetro TITLE 80
4.7.14.1 Exemplo 80
4.8 Statement PEND 80
4.9 Statement PROC 80
4.9.14.1 Exemplo 80
5 Statements de controle do JES2 82
5.1 Statement de comando do JES2 82
5.1.1.1 Exemplos 82
5.2 Statement MESSAGE 82
5.2.1.1 Exemplo 83
5.3 Statement NOTIFY 83
5.3.1.1 Exemplos 83
5.4 Statement ROUTE 83
5.4.1.1 Exemplos 84
5.5 Statement SETUP 85
5.5.1.1 Exemplo 85
5.6 Statement XEQ 85
5.6.1.1 Exemplo 86
1 Introdução
1.1Observações
Ÿ Esse material é o resultado de anotações sobre o documento "OS/390
V2R10.0 MVS JCL Reference" - GC28-1757-09 - Pgm # 5647-A01.
Ÿ Esse manual se destina a dar suporte para palestras e cursos internos.
Ele é distribuído na base "como está", sendo que não há compromisso
algum, quer da IBM, quer do autor, para emissão de novos releases ou
correções.
Ÿ Assuntos referentes ao JES3 foram omitidos.
Ÿ Alguns parâmetros, mesmo que referenciados, não foram devidamente
documentados por estarem fora do escopo do manual. Caso seja
necessário o usuário deve consultar o documento original.

7
2 Generalidades
A finalidade do JCL é comunicar ao sistema operacional o que se
vai fazer e requisitar os recursos necessários para que o serviço possa ser
executado corretamente.

Alguns termos serão frequentemente usados em textos desse


documento. Vamos defini-los:

Ÿ STEP - (ou job step) - Identificado pelo statement EXEC, solicita que o
sistema operacional execute um programa, determina os recursos
necessários e ainda pode conter input para o processamento. Um job
pode ter, no máximos, 255 steps.
Ÿ JOB - Identificado pelo statement JOB, é uma coleção de steps.
Ÿ PROCEDURE - Procedure é um stream de statements JCL, que é
executado frequentemente com pouca ou nenhuma modificação.
Quando esse stream estágravado num PDS (biblioteca), costuma-se
chamá-la de procedure catalogada.

2.1Como se monta um job?


Ÿ Começe sempre pelo statement JOB:
- Ele marca para o sistema o início de um string de JCL.
- Toda mensagem, passada para o operador será identificada pelo
jobname.
- Seu JCL, mensagens, substituições de simbólicos, etc, são
agrupadas no spool com o nome igual ao seu jobname.
- O jobname será usado nas notificações enviadas para os vários
destinatários de mensagens.
Ÿ Coloque em seguida todos os statements que se referem ao job como
um todo (statements JOBLIB, JOBCAT, JCLLIB, OUTPUT, etc).
Ÿ Coloque os vários statements EXEC (de programa ou de procedure)
pois eles indicam para o sistema o que vai ser processado.
Ÿ Entre os statements EXEC coloque os statements DD que descrevem
para o sistema os arquivos que servirão como entrada e saída de cada
processamento.
Ÿ Distribua os statements de comentário à vontade dentro do seu string
de JCL.
Ÿ Genéricamente isso é o principal em qualquer job. Outros statements
são úteis, embora pouco usados.
Ÿ Veja o exemplo abaixo

//JOB001 JOB (AE02,SAWR),'SAWR PEDRO',


// MSGCLASS=X,CLASS=B,NOTIFY=USER99,
// MSGLEVEL=(1,1)
//STEP1 EXEC PGM=IEBCOPY

8
//****************************************************
//* CRIA BACK UP DE BIBLIOTECA
//****************************************************
//SYSPRINT DD SYSOUT=*
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,5))
//INP DD DISP=SHR,DSN=XXX.BIBL.FONTES
//OUT DD DISP=(,CATLG,DELETE),
// DSN=XXX.BIBL.FONTES.BKP,
// UNIT=SYSDA,VOL=SER=DISCO1,
// DCB=XXX.BIBL.FONTES,
// SPACE=(CYL,(10,5,300),RLSE)
//SYSIN DD *
COPY INDD=((INP,R)),OUTDD=OUT

2.2O Processamento do Job


1) O stream de JCL é submetido ao sistema operacional por um meio
qualquer: comando SUB do TSO/E, outro job o submete via internal
reader, etc.
2) O stream é conferido pela reader quanto à validade da sua sintaxe e se
for detetado algum erro o sistema emite um JCL ERROR e envia o
resultado para ser impresso; se estiver correto, o stream é armazenado
para ser executado oportunamente.
3) Assim que houver disponibilidade o job é selecionado para execução.
4) Baseado no JCL o sistema aloca os recursos necessário para execução
do step: caso o recurso esteja disponível, ele é alocado; caso ele esteja
disponível, mas em uso por outro job, ou o sistema aguarda a sua
liberação ou o usa compartilhadamente; caso o recurso não esteja
disponível, ele é solicitado para o operador; caso ele não exista, ocorre
JCL ERROR e o job é encerrado.
5) Até aqui, qualquer problema detetado pelo sistema operacional causa
um JCL ERROR. Daqui para frente, qualquer problema detetado
resultará num fim anormal do job (ABEND).
6) O programa é carregado na memória e ocorre a sua execução.
7) Terminada a execução do programa, os recursos alocados para ele são
liberados ou retidos para uso nos steps seguintes, conforme
determinado pelo JCL.
8) O processo é repetido a partir do item 4 para cada job step até que não
haja mais job steps para serem executados.
9) Todos os recursos alocados para o job são liberados e o seu
processamento termina.

2.3Campos de JCL Statement


9
Todo statement de JCL é codificado em registros de 80 bytes e se
compõe de até 5 campos:

Ÿ Identificador - colocado nas colunas 1 e 2 ele contém // ou /*


- começa na coluna 1
- pode conter // ou /* ou //*
Ÿ Nome
- começa na coluna 3
- tem, no máximo, 8 bytes
- o primeiro caráter tem de ser alfabético, $, # ou @
- após o nome deve existir pelo menos um branco
Ÿ Identificador
- determina o tipo de statement (DD, EXEC, PROC, PEND, etc)
- tem de estar antes da coluna 17
- sempre prescedido e seguido por pelo menos um branco
Ÿ Parâmetros
- opções separadas por vírgulas
- são posicionais quando o significado varia de acordo com a
posição que eles ocupam.
- são de palavra chave quando são prescedidos por uma palavra
chave seguida do sinal de igual (=)
Ÿ Cometários
- separado dos parâmetros por, pelo menos, um branco

2.4Campos de Statements de JES2


Os statements de JES2 têm as mesmas regras que os de JCL,
exceto quanto aos seguintes aspectos:
- colunas 1 e 2 contêm sempre /*
- não aceitam comentários

2.5Continuação de Statements (JCL e JES2)


Ÿ Statements de JES2 não aceitam continuação.
Ÿ Statemente de comando e comentários não aceitam continuação.
Ÿ Statements de JCL são codificados somente até a coluna 71, porém
aceitam continuação. Existem 2 possibilidades para continuação do
statement de JCL:
a) Interrompendo na vírgula.
- Interrompa o statement numa vírgula antes da coluna 72
- No registro seguinte coloque // nas colunas 1 e 2, seguido de pelo
menos um branco
- Continue a codificação em qualquer ponto após a coluna 3 e antes
da coluna 17
b) Interrompendo fora da vírgula.

10
- Interrompa o statement numa vírgula antes da coluna 72
- Coloque um caráter qualquer na coluna 72
- No registro seguinte coloque // nas colunas 1 e 2
- Continue a codificação exatamente na coluna 16.

2.6Sintaxe de Parâmetros
- Codifique todos os parâmetros em letras maiúsculas
- Caso seja necessário usar caracteres especiais, codifique-os entre
apóstrofes.

2.7Backward References
Backward reference é a referência feita a um statement codificado
anteriormente no JCL. Backward references podem ter um dos seguintes
formatos:

- *.ddname
- *.stepname.ddname
- *.stepname.procstepname.ddname

As situações em que são permitidas as backward references são:

- CNTL - se refere a um statement CNTL anterior


- DCB - se refere à DCB de um statement anterior
- DSN - se refere ao dsname de um ddname anterior
- OUTPUT - se refere a um statement OUTPUT anterior
- REFDD - se refere aos atributos do arquivo citado num ddname
anterior
- VOL=REF - se refere aos atributos de um volume referenciado
num ddname anterior.
- PGM - se refere a um ddname anterior que define o programa a ser
executado.

2.7.1Exemplos de Backward References

- DDnames estão no mesmo step

//JOB1 JOB ...


//STEPA EXEC ...
//DD1 DD DSNAME=REPORT
.
.
//DD4 DD DSNAME=*.DD1
11
- DDnames estão em steps diferentes

//JOB2 JOB ...


//STEP1 EXEC ...
//DDA DD DSNAME=D58.POK.PUBS01
.
.
//STEP2 EXEC ...
//DDB DD DSNAME=*.STEP1.DDA

- Usando uma proc catalogada

A proc catalogada PROC1 contém:


//PS1 EXEC ...
.
.
//PSTEP1 EXEC ...
//DS1 DD DSNAME=DATA1
//PSTEP2 EXEC ...
//DS2 DD DSNAME=DATA2

O job contém:
//JOB5 JOB ...
//CALLER EXEC PROC=PROC1
.
//REF1 DD DSNAME=*.CALLER.PSTEP2.DS2
//NEXT EXEC ...
//REF2 DD DSNAME=*.CALLER.PSTEP1.DS1
.

2.8Procedure In-stream
Damos o nome de procedure in-stream quando a procedure está
dentro do próprio job.
- Ela deve começar por um statement PROC e terminar por um
statement PEND. Nesse caso são válidas as seguintes restrições:
- Não são permitidos statements de controle de JES.
- Não é permitido o uso de DD * ou DD DATA
- Não é permitida a definição de uma procedure dentro de outra
procedure

2.9Procedure Catalogada
Damos o nome de procedure catalogada a um JCL gravado como

12
membro de uma biblioteca (PDS). Nesse caso valem as mesmas regras que
as das procedures in-stream, exceto que os statements PROC e PEND são
opcionais.

O sistema usa as procs na seguinte ordem:

1) Do input stream
2) Da biblioteca especificada no statement JCLLIB
3) Conforme a concatenação na procedure do JES2

2.10Modificando Procedures
Uma procedure pode ser modificada trocando valores atribuídos a
parâmetros simbólicos ou executando-se um override.
Para facilidade de entendimento vamos usar a procedure abaixo
como exemplo, que estaria gravada numa biblioteca com o nome COPIA:

//PRC1 PROC MBRIN=MBR1,MBROU=MBR2


//STEP0 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DISP=SHR,
// DSN=XX.BIBLIOTECA(&MBRIN)
//SYSUT2 DD DISP=SHR,
// DSN=XX.BIBLIOTECA(&MBROU)
//SYSIN DD DUMMY

2.10.1Simbólicos
Ÿ Caracterizados pelo símbolo "&" colocado antes dos valores. No
exemplo acima veja &MBRIN e &MBROU
Ÿ Nunca podem estar no lugar de palavras chaves
Ÿ No statement PROC podem ser atribuídos valores defaults. No
exemplo acima temos "MBRIN=MBR1,MBROU=MBR2"
Ÿ Seus valores podem ser modificados no statement EXEC de execução
da procedure:
// EXEC COPIA,MBRIN=ENTRADA
Ÿ Para anular o valor de um simbólico basta referenciá-lo no statement
de execução da proc sem valor nenhum:
// EXEC COPIA,MBROU=

2.10.2Override
- Se a procedure é composta de um único step basta referenciar
apenas o ddname. Por exemplo:
// EXEC COPIA
//SYSIN DD BLKSIZE=3200

13
- Se a procedure tem mais de um step, deve-se usar
stepname.ddname. Por exemplo:
// EXEC COPIA
//PRC1.SYSIN DD BLKSIZE=3200

2.11O JCL na listagem


Dependendo do valor especificado no parâmetro MSGLEVEL= do
statement JOB, o output de execução de um job terá um nível de detalhe.
Cada linha de output será identificada pelo conteúdo das 3 primeiras
posições:

TEXTO DESCRIÇÃO
// JCL conforme foi submetido
//* Comentário, conforme foi submetido ou comandos de JES2
ou JES3
/* Certos comandos de JES3
XX Statement de procedure que não sofreu override
X/ Statement de procedure que sofreu override
++ Statement de procedure in stream que não sofreu override
+/ Statement de procedure in stream que sofreu override

2.12Started Tasks
Started task é um JCL que deve ser executado imediatamente, a
partir de um comando START. Geralmente é usada para aplicativos críticos.
Embora possam ser jobs (com statement JOB), o mais normal é gravar uma
procedure (sem statement JOB) na SYS1.PROCLIB. Nesse caso, se
gravarmos o JCL com o membername INICIA, ao emitirmos o comando
START, o JES, automaticamente cria um job com o nome de INICIA e o
submete.

14
3 Statements de JCL

3.1Statement COMMAND
Usado para entrar comandos de MVS através de um input stream
num sistema de JES2. É importante notar que o comando será executado
assim que for detetado, ou seja, no momento da leitura do JCL, portanto
antes do job começar a ser executado.

// comando parametros comentarios


//nome COMMAND 'comando parametros' comentários

Ÿ Ambas as formas são parecidas:


- A primeira forma não admite continuação;
- Na segunda, para fazer a continuação, use até a coluna 71 do
registro e continue o comando a partir da coluna 16 do registro
seguinte.
Ÿ O "comando" sempre será codificado após a coluna 3
Ÿ Os "parâmetros" são os mesmos exigidos pelo próprio comando,
quando emitido via console.
Ÿ Os "comentários" visam apenas documentar o comando e devem vir
separados dos "parâmetros" por pelo menos um branco.
Ÿ Esse statement pode aparecer em qualquer ponto do JCL após o
statement JOB.

3.1.1Exemplos

// F NETVIEW,CLOSE IMMED
(Em resposta a esse comando o sistema tira do ar imediatamente o
NETVIEW)

// COMMAND 'START ABC,PARM=’AAA’’


(Note que todo o texto do comando está entre apóstrofes porque
ele contém caracteres especiais).

3.2Statement Comentário
Usado apenas para documentar um stream JCL, não tem efeito
algum na sua execução

15
Ÿ Pode ser colocado em qualquer ponto do JCL (após o statement JOB),

//*comentários .....

inclusive entre continuações.

3.2.1Exemplo
//* ESSE COMENTARIO PODE SER CONTINUADO
//* EM VÁRIOS REGISTROS,
//* DEPENDENDO DA QUANTIDADE
//* DE INFORMACOES QUE SE TEM.

3.3Statement CNTL
Usado para marcar o início de um bloco de statements de controle,
o seu fim é marcado pelo statement ENDCNTL.

//label CNTL * comentários

Ÿ O "label" é um nome qualquer


- Pode ter até 8 caracteres alfanuméricos
- O primeiro caráter tem de ser alfabético ou nacional ($ # @)
- Tem de começar na coluna 3
Ÿ O asterisco só é mandatório quando existem comentários
Ÿ O grupo CNTL/ENDCNTL deve aparecer no JCL antes de ser
referenciado.
Ÿ Se ele for codificado após o statement JOB, ele pode ser referenciado
em qualquer ponto do JCL; se ele for codificado após o primeiro
statement EXEC, ele só pode ser referenciado dentro do step em que o
grupo foi definido.

3.3.1Exemplo

//STEP1 EXEC PGM=PRINT


//ALPHA CNTL * CONTROL STATEMENT
//PRG PRINTDEV BUFNO=20,PIMSG=YES
//OMEGA ENDCNTL
//AGAR DD
UNIT=3800-3,CNTL=*.ALPHA

16
3.4Statement DD
Usado para definir arquivos usados como input/output de um
programa.

//ddname DD parâmetros
//procstepname.ddname DD parâmetros

Ÿ O "ddname":
- Deve começar na coluna 3 e deve ser único dentro do step.
- Pode ter até 8 caracteres alfanuméricos.
- O primeiro caráter tem de ser alfabético ou nacional ($ # @)
Ÿ O “ddname” é determinado pela codificação do programa quando,
internamente, são definidos os files e se executam operações de leitura
e gravação (instruções READ/WRITE, GET/PUT, EXECIO, etc).
Portanto só se sabe os ddnames indispensáveis para a execução de um
programa, conhecendo-se o programa internamente.
Ÿ A omissão do "ddname" indica que o arquivo definido pelo statement
deve ser concatenado com o DD imediatamente anterior, isto é, ambos
os arquivos serão processados como um único arquivo.
Ÿ Ao se concatenar arquivos com BLKSIZEs diferentes, especifique no
primeiro dos arquivos o maior BLKSIZE presente. Por exemplo:
//INP1 DD DSN=ABC.X1,BLKSIZE=32760
// DD DSN=ABC.X2
// DD DSN=ABC.X3
Ÿ Ao se concaternar arquivos com tamanhos de registros lógicos
diferentes, codifique explicitamente o parâmetro LRECL fornecendo o
tamanho do maior registro lógico possível.
Ÿ Se o "ddname" for composto de dois qualificadores separados por um
ponto, teremos o formato "stepname.ddname"; caso seja composto de 3
qualificadores teremos o formato "procstepname.stepname.ddname".
Por exemplo:
//PRCST01.STEP30.SYSPRINT DD SYSOUT=X
Ÿ Os ddnames abaixo têm significado especial e serão descritos mais
adiante:
JOBCAT SYSCHK
JOBLIB SYSCKEOV
STEPCAT SYSIN
STEPLIB SYSMDUMP
SYSABEND SYSUDUMP
JESJCLIN JESMSGLG
JESJCL JESYSMSG
Ÿ Os "parâmetros" devem estar separados da palavra DD por pelo menos
17
um branco.
Ÿ Os parâmetros podem ser posicionais (seu significado depende da
posição dentro do statement) ou de palavra chave (identificados pelo
sinal de igual "=", e podem estar em qualquer posição dentro do
statement.

3.4.1Parâmetro Asterisco (*)


Indica que um arquivo de input vem logo a seguir e não contém
statements de JCL

//ddname DD *,parameter... comments

Ÿ Posicional (tem de vir imediatamente após a palavra DD).


Ÿ O arquivo de input termina numa das seguintes condições:
- Localizado um statement /*
- Localizado um statement qualquer de JCL
- Término do JCL
- Encontrados os caracteres especificados pelo parâmetro DLM
Ÿ Caso o arquivo de input contenha statements de JCL, use o parâmetro
DATA no lugar do asterisco (*).
Ÿ Esse parâmetro não pode ser usado em procedures.

3.4.1.1Exemplo

//INPUT1 DD *
dados
//INPUT2 DD *
dados
/*

3.4.2Parâmetro AMP
Usado para completar informações sobre arquivos VSAM.

AMP=(subparâmetro)
AMP=('subparâmetro,subparâmetro...')
AMP='subparâmetro,subparâmetro...'

Ÿ Os "subparâmetros podem ser

18
AMORG
BUFND=number
BUFNI=number
BUFSP=number
CROPS= ÝNCK¨ ÝNRC¨ ÝNRE¨ ÝRCK¨
OPTCD= {I } {L } {IL}
RECFM= ÝF ¨ ÝFB¨ ÝV ¨ ÝVB¨
STRNO=number
SYNAD=module
TRACE=(subparameter,subparameter...)
ACCBIAS=USER SYSTEM DO
DW SO SW
SMBDFR= {Y N}
SMBHWT= nn
SMBVSP= {nnK nnM}
RMODE31=ALL BUFF CB None

Ÿ Os parêntesis só são necessários quando vai haver continuação de


statement.
Ÿ Se houver mais de um subparâmetro, coloque-os entre parêntesis e
entre apóstrofes. Por exemplo: AMP=('AMORG,STRNO=4')
Ÿ AMORG
- Indica que o DD define um arquivo VSAM.
Ÿ BUFND=number
- Especifica número de buffers a ser usado em operações de I/O
sobre a área de dados do arquivo. Mínimo = 2
- Quando omitido, o default é o número especificado em STRNO +
1
Ÿ BUFNI=number
- Especifica número de buffers a ser usado em operações de I/O
sobre a área de índice do arquivo. Minimo = 1.
- Quando omitido, seu default é o número especificado em STRNO.
Ÿ BUFSP=number
- Especifica o tamanho da área que deve ser reservada para buffers
de dados e de índice.
Ÿ CROPS=NCK ou NRC ou NRE ou RCK
- Especifica opções de checkpoint/restart. Para maiores detalhes
veja o manual original de JCL.
Ÿ OPTCD=I ou L ou IL
- Especifica para o ISAM interface como processar os flags de
deleção de registros.
Ÿ RECFM=F ou FB ou V ou VB
- Identifica o formato dos registros lógicos dentro de um arquivo
ISAM.
Ÿ STRNO=number

19
- Número de request parameter lists que o programa usará ao
mesmo tempo
Ÿ SYNAD=module
- Nome da exit que o interface ISAM usará para manusear situações
de erro.
Ÿ TRACE=(subparameter,subparameter...)
- Especifica as opções que o GTF deve usar ao manusear esse
arquivo.
Ÿ RMODE31=opção
- Determina se os buffers e control blocks deve ou não residir na
memória 31-bit

3.4.2.1Exemplo
//VSAMDS1 DD DSN=DSM.CLASS,DISP=SHR,
// AMP=('BUFSP=200,BUFND=2',
// 'BUFNI=3,STRNO=4,SYNAD=ERROR')

3.4.3Parâmetro AVGREC
Usado com um arquivo novo para indicar que a unidade de
alocação de espaço é em registros e que o número estabelecido no
parâmetro SPACE está em unidades, milhares ou milhões de registros.

AVGREC=U ou K ou M

Ÿ Parâmetro válido somente se o sistema tiver SMS instalado.


Ÿ Quando for especificado AVGREC, o primeiro subparâmetro de
SPACE indica o tamanho médio dos registros que serão gravados no
arquivo.
Ÿ As opções são: U (o espaço está em unidades, múltiplos de 1); K (o
espaço está em milhares, múltiplos de 1024); M (o espaço está em
milhões, múltiplos de 1048576).

3.4.3.1Exemplo
//SMSDS3 DD DSN=MYDS.PGM,
// DATACLAS=DCLAS03,
// DISP=(NEW,KEEP),
// SPACE=(128,(5,2)),AVGREC=K
(Nesse exemplo, teremos um arquivo cujos registros lógicos têm, em
média 128 bytes, o espaço primário deve ter tamanho suficiente para conter
5120 registros e o espaço secundário deve ser suficiente para conter 2048
registros).

20
3.4.4Parâmetro BLKSIZE
Especifica o tamanho máximo do bloco em que os registros lógicos
estão agrupados.

BLKSIZE= {value} ou {valueK} ou {valueM} ou {valueG}

Ÿ "value" é um número para indicar o tamanho do bloco. Seu tamanho


máximo é 32760 para DASD e 2 147 483 648 para tape.
Ÿ Se "value" for especificado sozinho isso indica que o valor está em
bytes; K (indica que o valor está em K, ou seja múltiplos de 1024); M
(indica que o valor está em megabytes, ou seja, multiplos de
1024*1024); G (indica que o valor está em gigabytes, ou seja,
múltiplos de 1024*1024*1024).
Ÿ Default - Em certas circunstâncias o sistema pode calcular o melhor
BLKSIZE. Caso isso não seja possível, o BLKSIZE será igual ao valor
especificado em LRECL.

3.4.4.1Exemplos

//DD1B DD DSNAME=EVER,
// DISP=(,KEEP),UNIT=3380,
//
RECFM=FB,LRECL=326,BLKSIZE=23472,
// SPACE=(23472,(200,40))

//DD2B DD DSNAME=NEVER,
// DISP=(NEW,KEEP),UNIT=3590,
//
RECFM=FB,LRECL=326,BLKSIZE=404K

3.4.5Parâmetro CHKPT
Usado para forçar a gravação de um checkpoint ao fim de cada
volume num arquivo multivolume.

CHKPT=EOV

3.4.5.1Exemplos
//DS1 DD DSNAME=INDS,DISP=OLD,CHKPT=EOV,
// UNIT=SYSSQ,VOL=SER=(TAPE01,TAPE02,TAPE03)

21
//DS2 DD DSNAME=OUTDS,DISP=(NEW,KEEP),
// CHKPT=EOV,UNIT=SYSDA,VOLUME=(,,,8)

3.4.6Parâmetro CNTL
Usado para referenciar qualquer grupo CNTL/ENDCNTL do job.

CNTL= {*.label }
{*.stepname.label }
{*.stepname.procstepname.label}

Ÿ *.label - O sistema procura, primeiramente o "label" dentro do step,


caso não seja encontrado, então ele será procurado antes do primeiro
statement EXEC.
Ÿ *.stepname.label - O sistema procura o "label" apenas no "stepname".
Ÿ *.stepname.procstepname.label - O sistema procura o "label" apenas
no "stepaname" do "procstepname" referenciados.

3.4.6.1Exemplos

//MONDAY DD CNTL=*.WKLYPGM
//TUESDAY DD CNTL=*.SECOND.BLOCKS
//WEDNES DD CNTL=*.THIRD.PROCTWO.CANETTI

3.4.7Parâmetro COPIES
Usado para especificar quantas cópias de uma sysout serão
impressas. Se a sysout for impressa numa 3800, esse parâmetro indica
quantas cópias de uma página devem ser feitas antes que se passe para a
próxima página.

COPIES= {nnn }
{(nnn,(group-value,group-value...))}
{(,(group-value,group-value...)) }

Ÿ "nnn" indica o número de copias de uma sysout. Máximo = 255


Ÿ "group-value" indica quantas copias de cada página devem ser feitas
antes que se comece a imprimir a página seguinte. Máximo = 255
Ÿ Default = 1

22
3.4.7.1Exemplos

//RECORD1 DD SYSOUT=A,COPIES=32

(Nesse exemplo a sysout será impressa 32 vezes)

//RECORD2 DD SYSOUT=A,COPIES=(0,(1,2))

(Nesse exemplo teremos 3 cópias da sysout: no primeiro grupo a sysout


inteira será impressa uma vez; no segundo grupo serão impressas duas
cópias de cada página antes que se passe para a impressão da página
seguinte. Isso se a impressora for uma 3800)

//RECORD3 DD SYSOUT=A,COPIES=(8,(1,2))

(Esse caso é semelhante ao anterior, porém, se não for uma 3800, serão
impressas 8 cópias da sysout).

3.4.8Parâmetro DATA
Indica que o arquivo de input vem logo a seguir e que ele contém
statements de JCL.

//ddname DD DATA,parameter... comments

Ÿ O término do input é marcado por:


- Fim do stream de JCL
- Um statement começado por /*
- Um registro contendo os caracteres especificados pelo parâmetro
DLM
Ÿ Esse parâmetro não pode ser usado em procedures catalogadas ou in-
stream.
Ÿ Esse parâmetro é posicional, isso é: ele deve ser o primeiro parâmetro
imediatamente após a palavra DD.

3.4.9Parâmetro DATACLAS

Esse parâmetro só é válido se o sistema tem SMS instalado e serve


para fazer com que o novo arquivo assuma as características típicas da
classe especificada. Essas características são definidas pelo administrador
de SMS.

23
Ÿ As características definidas para uma classe são:

DATACLAS=data-class-name

- Data set organization


. Record organization (RECORG) or
. Record format (RECFM)
- Record length (LRECL)
- Key length (KEYLEN)
- Key offset (KEYOFF)
- Type, PDS or PDSE (DSNTYPE)
- Space allocation (AVGREC and SPACE)
- Retention period (RETPD) or expiration date (EXPDT)
- Volume-count (VOLUME)
- For VSAM data sets (IMBED or REPLICATE, CISIZE,
FREESPACE, SHAREOPTIONS)

3.4.9.1Exemplo

//SMSDS1 DD DSN=MYDS1.PGM,
// DATACLAS=DCLAS01,DISP=(,KEEP)
//SMSDS2 DD DSN=MYDS2.PGM,
// DATACLAS=DCLAS02,DISP=(,KEEP),
// LRECL=256,EXPDT=1996/033

(Nesse exemplo estão sendo usadas as características da classe


DCLAS02, exceto LRECL e EXPDT que sofreram override)

3.4.10Parâmetro DCB
Usado para especificar as características de um arquivo.

DCB=(subparameter,subparameter...)
DCB= ( {dsname },subparameter...)
( {*.ddname } )
( {*.stepname.ddname } )
( {*.stepname.procstepname.ddname} )

Ÿ Como os subparâmetros podem ser codificados como parâmetros


independentes, eles serão descritos mais adiante.
Ÿ "dsname" indica um arquivo (catalogado), cujas características devem

24
ser tomadas como modelo.
Ÿ "*.ddname" indica um ddname (no mesmo step) que descreve um
arquivo cujas características devem ser tomadas como modelo.
Ÿ "*.stepname.ddname" igual ao anterior quando o ddname está em outro
step
Ÿ "*.stepname.procstepname.ddname" igual ao anterior quando o
ddname está em outro procstepname.
Ÿ Qualquer subparâmetro codificado explicitamente junto com um
referback causará um override nas características copiadas do arquivo
modelo.
Ÿ Os subparâmetros possíveis na DCB são:
BFALN
BFTEK
BLKSIZE
BLKSZLIM
BUFIN
BUFL
BUFMAX
BUFNO
BUFOFF
BUFOUT
BUFSIZE
CPRI
CYLOFL
DEN
DIAGNS
DSORG
EROPT
FUNC
GNCP
INTVL
IPLTXID
KEYLEN
LIMCT
LRECL
MODE
NCP
NTM
OPTCD
PCI
PRTSP
RECFM
RESERVE
RKP
STACK

25
THRESH
TRTCH

3.4.10.1Exemplos

//DD1 DD DSNAME=ALP,
// DISP=(,KEEP),VOLUME=SER=44321,
// UNIT=3400-6,DCB=
(RECFM=FB,LRECL=240,
// BLKSIZE=960,DEN=1,TRTCH=C)

(Nesse exemplo todos os subparâmetros da DCB foram codificados


explicitamente e não foi usado nenhum arquivo como modelo)

//DD1A DD DSNAME=EVER,
// DISP=(NEW,KEEP),UNIT=3380,
// DCB=ABC.XY,LRECL=326,
// SPACE=(23472,(200,40))

(Nesse exemplo o arquivo EVER deverá usar todas as características do


arquivo catalogado ABC.XY, exceto LRECL, que sofreu override)

//DD2 DD DSNAME=BAL,DISP=OLD,
// DCB=(RECFM=F,LRECL=80,
// BLKSIZE=80)
//DD3 DD DSNAME=CNANN,
// DISP=(,CATLG,DELETE),UNIT=3400-6,
// LABEL=
(,NL),VOLUME=SER=663488,DCB=*.DD2

(Esse é um exemplo de uso de referback num mesmo step)

//DD5 DD DSNAME=SMAE,DISP=OLD,
// DCB=(*.STEP1.PROCSTP5.DD8,BUFNO=5)

(Nesse exemplo serão usadas as características do arquivo descrito no


ddname DD8 que está no STEP1 da procedure executada pelo procstep
PROCSTP5; exceto o BUFNO que sofreu override)

3.4.11Parâmetro DDNAME
Serve para adiar a definição de um arquivo até que a procedure
seja executada

26
Ÿ "ddname" - é o nome de um DD que definirá o arquivo

DDNAME=ddname

3.4.11.1Exemplo

//STEP EXEC PGM=TKM


//DD1 DD DDNAME=DD4
//DD2 DD DSNAME=A,DISP=OLD
.
.
//DD4 DD DSNAME=B,DISP=OLD
//DD5 DD UNIT=AFF=DD1

3.4.12Parâmetro DEST
Serve para enviar uma sysout para um destinatário qualquer.

DEST=destination

Ÿ Esse parâmetro só pode ser usado em conjunto com o parâmetro


SYSOUT. Se for usado com outro tipo de arquivo, ele será ignorado.
Ÿ Os valores possíveis para "destination" são:
- LOCAL|ANYLOCAL - indica um node local num device local
- name - indica um nome simbólico de um destinatário, conforme foi
definido no JES2.
- Nnnnn - identifica um node
- NnnRmmmm ou NnnnRmmm ou NnnnnRmm - indica um node e
uma workstation remota
- (node,remote) - a mesma coisa
- Rmmmm ou RMmmmm ou RMTmmmm - identifica uma
workstation remota
- Unnnn - identifia um terminal com routing especial
- (node,userid) - identifica um userid num node diferente daquele
em que o JCL está sendo executado.
- userid - identifica um userid definido no mesmo node em que o
JCL está sendo executado

3.4.12.1Exemplo

27
//JOB01 JOB ,'MAE BIRD',MSGCLASS=B
//STEP1 EXEC PGM=INTEREST
//DEBIT DD SYSOUT=A
//CALIF DD SYSOUT=A,DEST=R555
//FLOR DD SYSOUT=A,DEST=(BOCA,'9212U28')

(Nesse exemplo a sysout definida em DEBIT vai para quem submeteu o


job; a sysout definida em CALIF vai para o termina remoto 555; e a sysout
definida em FLOR vai para o userid 9212U28 que está no node BOCA)

3.4.13Parâmetro DISP
Descreve a situação atual do arquivo, o que fazer se a execução do
step não sofrer abend e o que fazer se ocorrer abend no step.

DISP=(status,fim-normal,fim-anormal)
DISP=( NEW,DELETE,DELETE )
OLD,KEEP,KEEP
SHR,PASS,CATLG
MOD,CATLG,UNCATLG
,,UNCATLG ou ,

Ÿ Os subparâmetros são:
- NEW (o arquivo está sendo criado)
- OLD (o arquivo já existe e será usado com exclusividade)
- SHR (o arquivo já existe e poderá ser comnpartilhado)
- MOD (se o arquivo existir, a sua gravação começará
imediatamente após a marca de fim de arquivo, isto é, os registros
serão acrescentados aos já existentes; se não existir, ele será
criado. Em ambos ele será usado com exclusividade)
- DELETE (o arquivo será deletado e descatalogado no final do
step)
- KEEP (o arquivo será mantido como está)
- PASS (o arquivo será passado para os steps subsequentes e será
deletado no fim do job se o DISP não for alterado)
- CATLG (o arquivo será mantido e catalogado)
- UNCATLG (o arquivo será descatalogado e mantido como está)
Ÿ Defaults
- NEW - Se o status for omitido
- DELETE - Se o status for NEW
- KEEP - Se o arquivo já existir

3.4.13.1Exemplos
28
//DD2 DD DSNAME=FIX,UNIT=3420-1,VOL=SER=44889,
// DISP=(OLD,,DELETE)

(Nesse exemplo o arquivo já existe, não será compartilhado, será


mantido em caso de fim normal do step e será deletado em caso de fim
anormal do arquivo)

//DD1 DD
DSN=SWITCH.LEVEL18.GROUP12,UNIT=3350,
// VOL=SER=LOCAT3,SPACE=(TRK,(80,15))

(Nesse exemplo o arquivo será criado, quer o step termine normal ou


anormalmente o arquivo será deletado)

//DD1 DD
DSN=SWITCH.LEVEL18.GROUP12,UNIT=3350,
// VOL=SER=LOCAT3,
// SPACE=(TRK,(80,15)),DISP=(,PASS)

(Nesse exemplo o arquivo será criado e passado para os steps seguintes e


deletado no final da execução do JCL)

3.4.14Parâmetro DLM
Estabelece o delimitador que indica o fim de um input que está
junto com o JCL.

DLM=delimiter

Ÿ "delimiter" estabelece um valor que, quando for encontrado a partir da


posição 1 de um input, será considerado como fim do input.
Ÿ Default = /*

3.4.14.1Exemplo

//DD1 DD DATA,DLM=AA
.
.
statements de JCL ou não
.
AA

29
(Nesse exemplo todo registro que estiver após //DD1 e antes de AA será
considerado como input)

3.4.15Parâmetro DSNAME
Determina o nome de um arquivo

{DSNAME} =name
{DSN } =name

Ÿ Os formatos possíveis para "name" podem ser:


- dsname = Nome completo do arquivo
- dsname(member) = nome completo de um particionado
(biblioteca) o nome de um membro dentro da biblioteca.
- dsname(generation) = nome parcial de um GDG e número da
versão. O número da versão pode ser: 0 (indica a última versão);
um número prescedido pelo sinal de + indicando uma versão mais
atual que a ultima (normalmente usado na criação de novas
versões); um número prescedido pelo sinal de menos (-) indicando
versões anteriores à última.
- &&dsname = indica um arquivo temporário
- &dsname(member) = indica um membro de uma biblioteca
temporária.
- *.ddname = indica que é para o sistema copiar o dsname que está
no mesmo step no "ddname" especificado
- *.stepname.ddname = idem quando está em step diferente.
- *.stepname.procstepname.ddname = idem quando o ddname está
num procstepanme diferente.
- NULLFILE = especifica que o arquivo não existe (equivale a
DUMMY)
Ÿ O dsname é um string com até 44 posições contendo caracteres
alfanuméricos ou nacionais (#, $, @).
Ÿ Se o dsname tem mais que 8 posições ele deve ser dividido em
qualificadores separados por pontos.
- NOTA:- Os pontos entrarão na contagem dos 44 caracteres.
Ÿ O primeiro caráter de um qualificador tem de ser alfabético ou
nacional.

3.4.15.1Exemplos

//DD1 DD DSNAME=ALPHA,DISP=SHR

(Nesse exemplo o dsname tem menos que 8 caracteres e o usuário optou

30
por não usar o processo de qualificadores)

//DD2 DD DSN=SYS1.PROCLIB(PROG12),DISP=SHR

(Nesse exemplo o arquivo a ser processado é apenas o membro PROG12


da biblioteca SYS1.PROCLIB)

//STEP1 EXEC PGM=CREATE


//DD4 DD DSN=&&DADO,
// DISP=(,PASS),UNIT=(3350,2),
// VOL=SER=334859,
// SPACE=(CYL,(10,,2),,CONTIG)
//STEP2 EXEC PGM=OPER
//DD5 DD DSN=*.STEP1.DD4,DISP=
(OLD,DELETE)

(Esse exemplo mostra a criação do arquivo temporário &&DADO


que será passado para o STEP2, onde ele será referenciado por referback e
será deletado)

//DDX DD DSN=ESSE.GDG(-1),DISP=SHR

(Esse exemplo mostra a alocação da penúltima versão de um GDG)

3.4.16Parâmetro DUMMY
Especifica que que o arquivo não existe.

//ddname DD DUMMY,parameter...

Ÿ Esse parâmetro é posicional, portanto deve ser o primeiro parâmetro


após a palavra DD
Ÿ Esse parâmetro é muito usado quando se quer, por exemplo, eliminar a
emissão de uma sysout sem alterar o programa.

3.4.16.1Exemplo

//SYSPRINT DD DUMMY,BLKSIZE=32760

3.4.17Parâmetro EXPDT
Usado para determinar a data de expiração de um arquivo novo ou
para alterá-la se o arquivo já existir.

31
EXPDT= {yyddd }
{yyyy/ddd}

Ÿ Os parâmetros são:
- yy = dois últimos dígitos do ano (de 00 ate 99)
- yyyy = ano (de 0000 até 9999)
- ddd = dia juliano (de 001 até 366)
Ÿ Note o uso da forma EXPDT=00000 que zera a data de expiração.

3.4.18Exemplos

//DD7 DD DSN=TOM1,DISP=(,KEEP),
// EXPDT=2006/020,
// UNIT=SYSDA,SPACE=(TRK,(1,1)),
// VOL=SER=663344

(Nesse exemplo o arquivo TOM1 será retido até dia 20 de janeiro de


2006)

3.4.19Parâmetro FREE
Usado para indicar para o sistema quando o arquivo referenciado
deve ser liberado.

FREE= {END } ou {CLOSE}

Ÿ END - O arquivo será liberado após o último step que o usar.


Ÿ CLOSE - O arquivo será liberado assim que for executado um close.

3.4.19.1Exemplos

//EA33 DD SYSOUT=D,FREE=CLOSE

(Nesse exemplo a sysout estará disponível para impressão assim que o


file EA33 sofrer um close dentro do programa)

3.4.20Parâmetro HOLD
Usado para fazer com que o sistema retenha uma sysout até que o
operador a libere.

32
HOLD= {YES} {Y }
{NO } {N }

Ÿ Se a sysout for internal reader, o job que está sendo submetido ficará
em hold até que o operador o libere.

3.4.20.1Exemplos

//JOB01 JOB ,'JOE DUQUETTE',MSGLEVEL=1


//STEP1 EXEC PGM=MJCOSCO
//DD1 DD SYSOUT=B,DEST=RMT6,
// HOLD=YES

3.4.21Parâmetro LABEL
Esse parâmetro indica qual a posição de um arquivo dentro de um
volume que contém vários arquivos.

LABEL=(pos,label
,PASSWORD,IN,RETPD=nnnn)
,,NOPWREAD,OUT,EXPDT={yyddd}
, {yyyy/ddd}

Ÿ "pos" é um número que indica a posição do arquivo dentro do volume


Ÿ Os valores possíveis para "label" são:
- SL (standard label, default)
- SUL (standard e user label ao mesmo tempo)
- AL (só para tape, ISO/ANSI label)
- AUL(só para tape, ISO/ANSI e user label)
- NSL (tape, não standard label)
- NL (tape, sem label)
- BLP (determina para o sistema que, embora o arquivo tenha label,
o processamento do label não deve ser executado)
- LTM (arquivo contem a leading tapemark)
Ÿ PASSWORD - indica que o arquivo só será processado se o operador
fornecer a password na console.
Ÿ NOPWREAD - indica que a password não será necessária para leitura.
Ÿ IN - indica que o arquivo só pode sofrer operações de leitura.
Ÿ OUT - indica que o arquivo só pode ser gravado. Qualquer tentativa de
leitura resultará num abend.

33
Ÿ Os parâmetros RETPD e EXPDT podem ser usados separadamente e
são explicados individualmente.

3.4.21.1Exemplos

//DD1 DD DSN=HERBI,DISP=(,KEEP),UNIT=TAPE,
// VOL=SER=T2,LABEL=(3,NSL,RETPD=188)

(O arquivo HERBI será gravado como terceiro arquivo do volume


T2, com label não standard e será retido por 188 dias a partir da data em
que for criado)

//DD1 DD DSN=MARIA,DISP=(OLD,KEEP),
// UNIT=TAPE,
// VOLUME=SER=T2,LABEL=(5,BLP),
// DCB=(LRECL=80,
// BLKSIZE=880,RECFM=FB)

(Nesse exemplo, como o label não será processado, o sistema não tem
praticamente nenhuma informação sobre o arquivo, assim, se em lugar de
montar a fita T2, o operador montar a fita T830, ela será aceita pelo sistema,
qualquer que seja o dsname do terceiro arquivo, ele será processado. Se
houver password, ela será ignorada. A DCB do arquivo é mandatória)

NOTA: Como todo arquivo é prescedido de um header e seguido de um


trailer, e como, nessa situação, eles serão tratados como arquivos, ao
processar o quinto file, na realidade estamos processando o segundo arquivo
que contém dados.

3.4.22Parâmetro LIKE
Usado apenas com SMS, serve para copiar os atributos de um
arquivo já existente.

LIKE=data-set-name

Ÿ Qualquer parâmetro especificado explicitamente causará o override do


mesmo parâmetro no modelo.

3.4.22.1Exemplo

//SMSDS6 DD DSN=MDS.PGM,
// LIKE=MDSCAT.PGM,DISP=(,KEEP)

34
3.4.23Parâmetro LRECL
Especifica o tamanho do registro lógico

LRECL=nnn ou nnnK

Ÿ "nnn" indica o número de bytes do registro lógico.


Ÿ "nnn" varia de 1 a 32760 para arquivos não-VSAM e de 1 a 32761
para arquivos VSAM.
Ÿ "nnnK" é a especificação em kilobytes e pode variar de 1 a 16383

3.4.23.1Exemplos

//DD1B DD DSN=EVER,DISP=
(,KEEP),UNIT=3380,
// RECFM=FB,LRECL=326,SPACE=(23472,(200,40))

//SMS DD DSN=MDS2.PGM,
// DATACLAS=DCLAS02,DISP=(,KEEP),
// LRECL=256

(Nesse exemplo está sendo feito um override no LRECL da classe


DCLAS02)

3.4.24Parâmetro MGMTCLAS
Usado apenas com SMS indica que o arquivo deve ser gerenciado
de acordo com a classe especificada.

MGMTCLAS=classe

Ÿ "classe" indica o nome da classe conforme foi estabelecido pelo


administrador do SMS.

3.4.24.1Exemplo

//SMSDS1 DD DSN=MDS1.PGM,DATACLAS=DCLAS1,
// STORCLAS=SCLAS1,
// MGMTCLAS=MCLAS01,DISP=(NEW,KEEP)

35
3.4.25Parâmetro OUTPUT
Associa uma sysout com um statement OUTPUT específico.

OUTPUT= {(reference,reference...)}

Ÿ Usado apenas em conjunto com o parâmetro SYSOUT=


Ÿ Se for associado a vários OUTPUTs, o sistema produz uma sysout para
cada associação
Ÿ "reference" pode ter um dos seguintes formatos:
- *.name (Refere-se a um statement OUTPUT anterior. O sistema
procura primeiramente no step onde está o parâmetro e, em
seguida, antes do primeiro statement EXEC)
- *.stepname.name (Idem, porém o sistema pesquisará apenas no
step referenciado em "stepname").
- *.stepname.procstepname.name (Idem, porém a pesquisa só se fará
no "stepname" da "procstepname")

3.4.25.1Exemplo

//J1 JOB ,'MARY LUDWIG'


//JOUT OUTPUT CLASS=C,FORMS=RECP,INDEX=6
//STEP1 EXEC PGM=XYZ
//SOUT OUTPUT CLASS=H,BURST=YES
//ALL DD SYSOUT=(,),
// OUTPUT=(*.JOUT,*.SOUT),COPIES=5
//IN DD DISP=SHR,DSN=MY.FILE

(Nesse exemplo, como o parâmetro OUTPUT se refere a dois statements


OUTPUT, serão geradas duas sysouts iguais)

3.4.26Parâmetro PROTECT
Usado para indicar se o arquivo deve ser protegido.

PROTECT= {YES} {Y }

Ÿ Só pode ser usado com RACF.

3.4.26.1Exemplo

36
//DASD DD DSN=US.MYDATA,DISP=(,CATLG),
// VOL=SER=333000,UNIT=3330,
// SPACE=(TRK,2),PROTECT=YES

3.4.27Parâmetro RECFM
Usado para indicar o formato dos registros de um arquivo

RECFM= {U} {V} {S} {B} {F} {T} {A} {M}

Ÿ U (Idefinido)
Ÿ V (Variável)
Ÿ B (Blocado)
Ÿ S (Spanned
Ÿ F (Fixo)
Ÿ T (O registro pode ser gravado usando o feature de track-overflow)
Ÿ A (O primeiro caráter do registro é do tipo ISO/ANSI para controle da
impressora)
Ÿ M (O primeiro caráter do registro é do machine para controle da
impressora)

3.4.27.1Exemplo

//DD1B DD DSN=XX,DISP=(,KEEP),UNIT=3380,
// RECFM=FB,LRECL=326,SPACE=(23472,
(200,40))

(Nesse exemplo os registros estão blocados e são de tamanho fixo)

3.4.28Parâmetro RETPD
Especifica um período de retenção durante o qual o arquivo não
pode ser nem deletado e nem atualizado.

RETPD=nnnn

Ÿ "nnnn" indica o número de dias em que o arquivo deve ser retido,


variando de 0 a 9999.

3.4.28.1Exemplo

37
//DD1 DD DSN=HERBI,DISP=(,KEEP),UNIT=TAPE,
// VOL=SER=T2,LABEL=(3,NSL),RETPD=188

3.4.29Parâmetro SPACE
Indica o espaço que deve ser reservado para o arquivo num DASD.

Pedido normal de espaço:


SPACE= ({TRK,}
(prim,sec,dir),RLSE,CONTIG,ROUND)
({CYL,},,index,,MXIG
({blklgth,} ,ALX
({reclgth,} ,

Pedido com endereço fixo:


SPACE= (ABSTR,(primary-qty,address,directory)
,index

Requisição só de diretório
SPACE=(,(,,directory))

Ÿ TRK - Indica que o espaço será alocado em trilhas


Ÿ CYL - Indica que o espaço será alocado em cilindros
Ÿ blklgth - (só se não for codificado AVGREC) Indica que o espaço será
calculado em blocos, mas o sistema alocará em trilhas.
Ÿ reclgth - (só se AVGREC for codificado e o SMS estiver ativo) Indica
que o espaço será calculado em registros, mas o sistema alocará em
trilhas.
Ÿ "prim" - tamanho da primeira alocação na unidade escolhida (TRK,
CYL, etc). O volume selecionado deverá ter espaço suficiente para que
o sistema atenda esse tamanho em até 5 pedaços.
Ÿ "sec" - tamanho das alocações secundárias, caso a alocação primária
seja insuficiente.
- Um arquivo pode ter até 16 extents se for não-VSAM e até 123
extents se for VSAM.
Ÿ "dir" - especifica o número de blocos de diretório a ser usado por um
particionado. Cada bloco de diretório descreve, em média, 8 membros.
Ÿ "index" - é o tamanho da área de índice para um arquivo ISAM.
Ÿ RLSE - Especifica que o espaço não usado deve ser liberado. A
38
liberação será feita na unidade alocada, assim se a alocação foi feita
em cilindros, apenas os cilindros totalmente vazios serão liberados.
Ÿ CONTIG - Indica que a alocação primária deve ser feita num único
extent.
Ÿ MXIG - Indica que a alocação primária deve ser feita na maior área de
espaço contíguo disponível.
Ÿ ALX - Indica que alocação primária deve estar nas 5 maiores áreas
disponníveis no dasd.
Ÿ ROUND - Quando a unidade de alocação foi o tamanho do bloco, esse
parâmetro indica que o espaço alocado deve ser arredondado para o
próximo limite de cilindro.
Ÿ ABSTR - Indica que o espaço alocado deve começar num endereço
específico, estabelecido pelo valor de "address".
Ÿ "address" - Especifica o endereço da primeira trilha a ser alocada pelo
arquivo.

3.4.29.1Exemplos

//DD1 DD DSN=&&TEMP,
// UNIT=MIXED,SPACE=(CYL,10)

(Nesse caso, serão alocados 10 cilindros para o arquivo. Caso não sejam
suficientes, não haverá alocação secundária e o job vai terminar
anormalmente)

//DD2 DD DSNAME=PDS12,DISP=(,KEEP),UNIT=3350,
// VOL=SER=25143,
// SPACE=(CYL,(10,,20),,CONTIG)

(PDS12 é uma biblioteca com apenas 10 cilindros e 20 blocos de


diretório. O espaço deve ser alocado num único bloco)

//REQ2 DD DSN=PET,UNIT=3390,VOL=SER=606674,
// SPACE=(ABSTR,(5,1))

(Nesse exemplo o arquivo PET terá 5 trilhas a partir da segunda trilha do


disco)

3.4.30Parâmetro SPIN
Especifica quando uma sysout deve ficar disponível para
processamento.

39
SPIN= {UNALLOC} {NO }

Ÿ UNALLOC - O arquivo estará disponível assim que for desalocado.


Ÿ NO - O arquivo estará disponível somente no término do job.

3.4.30.1Exemplo

//DD1 DD SYSOUT=A,FREE=CLOSE,SPIN=UNALLOC

3.4.31Parâmetro STORCLAS
Indica o storage class de um arquivo novo.

STORCLAS=name

Ÿ Usado somente se o SMS estiver ativo.


Ÿ “name" é o nome da storage class, conforme definido pelo
administrador de SMS.

3.4.31.1Exemplo

//SMS DD DSN=MYDS1.PGM,
// STORCLAS=SCLAS01,DISP=(,KEEP)

3.4.32Parâmetro SYSOUT
Indica que o arquivo é uma sysout.

SYSOUT= {class} {*}


{ (class,writer-name,form-name) }
,INTRDR,code-name
SYSOUT=(,)

Ÿ "class" - Indica a classe (A a Z, 0 a 9) da sysout.


Ÿ "*" - Indica que a sysout deve ser enviada para a classe especificada
pelo parâmetro MSGCLASS do statement JOB
Ÿ "(,)" - Forma usada quando se quer referenciar um statement OUTPUT
Ÿ "writer-name" - Especifica o nome de um programa local que funciona

40
como writer e que deve processar a sysout.
Ÿ "INTRDR" - Determina para o JES que essa sysout deve ser submetida
para o sistema como um stream de JCL.
Ÿ "form-name" - Nome do formulário a ser usado para imprimir a sysout.
Ÿ "code-name" - Especifica um statement /*OUTPUT do JES2, do qual
devem ser obtidas as características de processamento da sysout.

3.4.32.1Exemplos

//DD1 DD SYSOUT=P

//STP1 EXEC PGM=ANS


//OT1 OUTPUT DEST=NYC
//OT2 OUTPUT DEST=LAX
//OT3 OUTPUT COPIES=5
//DSA DD SYSOUT=H,
// OUTPUT=(*.OT2,*.OT1,*.OT3)

(Nesse exemplo, o arquivo gerado em DSA será enviado para NYC,


LAX e ainda serão geradas mais 5 cópias localmente)

//DD5 DD SYSOUT=(A,INTRDR)

(Nesse exemplo, a sysout gerada em DD5 será submetida para o sistema


como um JCL)

3.4.33Parâmetro UNIT
Usado para requisitar que o sistema aloque um arquivo num device
específico, ou num certo grupo de devices.

{UNIT=(ddd,unit-count,DEFER) }
/ddd,P
/dddd,
device-type
group-name
{UNIT=AFF=ddname}

Ÿ Não use esse parâmetro com SMS, prefira o parâmetro STORCLAS ou


deixe que o sistema decida.
Ÿ "/ddd" "/dddd" "ddd" - Identifica o endereço específico do device.
Evite usar esses formatos, pois, se o device estiver em uso ou estiver
danificado, o job terá de esperar a sua liberação ou ser cancelado.
Ÿ device-type - Requisita um device pelo seu nome genérico.

41
Ÿ group-name - Requisita um device pelo seu nome simbólico. O nome
simbólico é atribuído por cada instalação.
Ÿ unit-count - É um número de 1 a 59, indicando o número de devices
disponíveis para o arquivo.
Ÿ "P" - Indica que o sistema deve alocar um número de devices igual ao
número de volumes contidos no parâmetro VOL=
Ÿ DEFER - Indica que o sistema deve reservar o device, porém
requisitará sua montagem no momento em que for aberto.
Ÿ AFF=ddname - Indica que o sistema deve usar o mesmo device que foi
alocado para outro ddname (no mesmo step).
Ÿ Quando usado o parâmetro AFF=, o ddname referenciado deve
aparecer antes, no JCL.

3.4.33.1Exemplos

//STEP2 EXEC PGM=POINT


//DDX DD DSN=EST,DISP=MOD,
// VOL=SER=(42569,42570),
// UNIT=(3480,2)
//DDY DD DSNAME=ERAS,DISP=OLD,UNIT=3480
//DDZ DD DSNAME=RECK,DISP=OLD,
// VOL=SER=(40653,13262),UNIT=AFF=DDX

//DD1 DD DSNAME=AAG3,DISP=(,KEEP),
// VOLUME=SER=13230,UNIT=3400-5

(Esse exemplo requisita uma unidade de fita que opere na


modalidade de 6250 BPI)

//DD2 DD DSNAME=X.Y.Z,DISP=OLD,UNIT=(,2)

(Esse exemplo pede duas unidades para o arquivo X.Y.Z, o tipo de


unidade será determinado através do catálogo).

//DD3 DD DSNAME=COLLECT,DISP=OLD,
// VOLUME=SER=1095,UNIT=(3490,,DEFER)
(Esse exemplo requisita uma unidade do tipo 3490, porém o volume só
será pedido para ser montado quando e se ele for aberto).

3.4.34Parâmetro VOLUME
Usado para informar ao sistema em que volume o arquivo reside ou
residirá (se estiver sendo criado).

42
{VOLUME} = (PRIVATE,RETAIN,vol-seq-number,vol-count
{VOL } ,,

SER=serial-number
SER=(serial-number,serial-number...)
,REF=dsname
REF=*.ddname
REF=*.stepname.ddname
REF=*.stepname.procstepname.ddname

Ÿ Os quatro primeiros parâmetros são posicionais, portanto a sua


omissão deve ser indicada por uma vírgula. Por exemplo: VOLUME=
(,RETAIN,2,3,SER=(222001,222002,222003))
Ÿ PRIVATE - Requisita um volume reservado, isso é: o volume não será
alocado como output, a menos que seja requisitado especificamente
por outro job e, se for tape, ele será desmontado assim que o arquivo
que está gravado nele sofra um close.
Ÿ RETAIN - (Usado com PRIVATE) Indica que o volume não deve ser
desmontado ou reenrolado após o close ou após o fim do step. Esse
parâmetro só se justifica quando usado com tape.
Ÿ vol-seq-number - Num arquivo multivolume, determina a partir de que
volume o arquivo será usado.
Ÿ volume-count - Especifica o número máximo de volumes que um
arquivo de saída pode usar (entre 1 e 255).
Ÿ SER=serial-number SER=(serial-numberÝ,serial-number¨...) -
Identifica os volumes onde o arquivo está ou deverá estar.
Ÿ Não use como "serial-number" palavras como SCRTCH, PRIVAT,
Lnnnnn e MIGRAT, que são palavras reservadas.
Ÿ REF=dsname, REF=*.ddname, REF=*.stepname.ddname e
REF=*.stepname.procstepname.ddname - Determinam para o sistema
que o volser deve ser obtido de um outro arquivo ou outro DD
statement.

3.4.34.1Exemplos

//DD1 DD DSNAME=DATA3,UNIT=SYSDA,DISP=OLD,
// VOLUME=(PRIVATE,SER=548863)

(Requisitando o arquivo DATA3 que reside num dasd cujo voler é


548863)

//DD2 DD DSN=QUET,DISP=(MOD,KEEP),
// UNIT=(3400-5,2),
// VOLUME=(,,,4,SER=(96341,VOL01)
43
(Requisitando o arquivo QUET que reside nos volumes 96341 e VOL01,
caso seja necessário, o sistema pode requisitar mais um terceiro e um quarto
volume quaisquer)

//STEP1 EXEC PGM=....


//DD1 DD
DSN=OLD.SMS.DATASET,DISP=SHR
//DD2 DD DSN=FIRST,
// DISP=(,CATLG,DELETE),VOL=REF=*.DD1

//STP2 EXEC PGM=...


//DD3 DD DSN=SECOND,DISP=
(,CATLG,DELETE),
// VOL=REF=*.STEP1.DD1

(O statement DD1 aloca um arquivo já existente e determina seu volser


via catálogo; o DD2 aloca um novo arquivo no mesmo volume; e DD3 aloca
um terceiro arquivo usando referback).

44
4 Statements DD especiais
4.1.1JOBCAT
Usado para forçar que o sistema antes pesquise esse catálogo e só
depois ele vá pesquisar o master catalog e, depois, o user catalog. Essa
situação persiste durante todo o job.
Ÿ Se no mesmo job for especificado STEPCAT e JOBCAT, o STEPCAT
tem a prescedência.
Ÿ Esse statement deve estar depois dos statements JOB e JOBLIB e antes
do primeiro EXEC.

4.1.1.1Exemplo
//EXAMPLE JOB WILLIAMS,MSGLEVEL=1
//JOBLIB DD DSNAME=USER.LIB,DISP=SHR
//JOBCAT DD DSNAME=LYLE,DISP=SHR
// EXEC PGM=SCAN

4.1.2JOBLIB
Faz com que o sistema procure os programas executados em cada
EXEC do job nas bibliotecas referenciadas no JOBLIB.
Ÿ Se o programa não for encontrado nessas bibliotecas, a pesquisa
continuará nas bibliotecas do sistema.
Ÿ Se um determinado step contiver o statement STEPLIB, as bibliotecas
referenciadas no JOBLIB não serão pesquisadas.
Ÿ O statement JOBLIB deve vir imediatamente após o statement JOB.

4.1.2.1Exemplo

//PAYROLL JOB BIRDSALL,TIME=1440


//JOBLIB DD DSNAME=KRG.LIB12,DISP=SHR
// DD DSNAME=GROUP31.TEST,DISP=SHR

4.1.3STEPCAT
Estabelece qual o catálogo deve ser pesquisado à procura de um
arquivo já existente, ou onde deve ser catalogado um arquivo que está sendo
criado.
Ÿ O uso de STEPCAT pode fazer com que um arquivo seja catalogado
num catálogo errado. É preferível definir um alias antes de criar o
arquivo, omitir o STEPCAT e deixar o sistema determinar que
catálogo usar.

4.1.3.1Exemplo
// EXEC PROC=SNZ12
//STEPCAT DD DSNAME=BETTGER,DISP=SHR

45
4.1.4STEPLIB
Indica para o sistema em que biblioteca procurar o programa
executado em determinado statement EXEC.
Ÿ Caso o programa não esteja nessa biblioteca, então ele será procurado
nas bibliotecas do próprio sistema.
Ÿ Se for codificado o STEPLIB, o JOBLIB será ignorado.

4.1.4.1Exemplo

//PAYROLL JOB BROWN,MSGLEVEL=1


//JOBLIB DD DSN=MY.LIB,DISP=(OLD,KEEP)
//STEP1 EXEC PROC=LAB14
//STEPLIB DD DSN=PRIV.LIB5,DISP=(OLD,KEEP)
//STEP2 EXEC PGM=SPKCH
//STEP3 EXEC PGM=TIL80
//STEPLIB DD DSN=PRIV.LIB12,DISP=(OLD,KEEP)

(O programa LAB14 será procurado na PRIV.LIB5 e nas bibliotecas do


sistema; o programa SPKCH será procurado na MY.LIB e nas bibliotecas
do sistema; o program TIL80 será procurado na biblioteca PRIV.LIB12 e
nas bibliotecas do sistema).

4.1.5SYSABEND, SYSMDUMP e SYSUDUMP


Todos eles são usados para produzir dump.
Ÿ SYSABEND - Produz dump das áreas do sistema e do usuário, e ainda
da LSQA e da IOS, formatado e pronto para impressão.
Ÿ SYSMDUMP - Produz dump das areas do sistema e do address space
do programa. O dump não é formatado.
Ÿ SYSUDUMP - Produz um dump formatado das áreas do usuário.

4.1.5.1Exemplos

//STEP2 EXEC PGM=ABC


//SYSUDUMP DD SYSOUT=A
//STEP2 EXEC PGM=ABC
//SYSMDUMP DD DSN=DUMP,DISP=(NEW,KEEP),
// UNIT=3400-6,VOLUME=SER=147958

4.1.6SYSCHK
Usado para definir um arquivo de checkpoint que será gravado
durante a execução do programa e lido por ocasião do restart.
Ÿ Esse statement tem de estar após os statements JOB e JOBLIB e antes

46
do primeiro statement EXEC.

4.1.6.1Exemplo

//JOB1 JOB RESTART=(STEP3,CK3)


//SYSCHK DD DSNAME=CHLIB,UNIT=3350,
// DISP=OLD,VOLUME=SER=456789
//STEP1 EXEC PGM=A

4.1.7SYSIN
Por convenção esse statement define um arquivo de entrada que
contém parâmetros e cartões de controle para execução de um programa.

4.1.7.1Exemplo

//COMPRES EXEC PGM=IEBCOPY


//SYSPRINT DD SYSOUT=*
//SYSUT2 DD UNIT=SYSDA,
// SPACE=(CYL,(5,5),RLSE)
//SYSUT3 DD UNIT=SYSDA,
// SPACE=(CYL,(5,5),RLSE)
//COMP DD DISP=SHR,
// DSN=SYS1.OPX.DSIPARM
//SYSIN DD *
COPY INDD=COMP,OUTDD=COMP

4.1Statement ENDCNTL
Usado para marcar o fim de um grupo de statements de controle,
sempre é usado o par CNTL/ENDCNTL

//label ENDCNTL comments

4.1.1.1Exemplo

//STEP1 EXEC PGM=PRINT


//ABLE CNTL
//STATE1 PRINTDEV BUFNO=20,PIMSG=YES,
// DATACK=BLOCK
//BAKER ENDCNTL
//CALLER DD UNIT=3800-3,CNTL=*.ABLE

47
4.2Statement EXEC
Identifica um programa ou procedure a ser executado, marcando o
início de um step.

//stepname EXEC positional-parm


,keyword-parm...,symbolic-parm=value... comments

Ÿ "stepname" - é opcional, mas deve ser usado por facilitar na análise do


output de execução, por ser indispensável para se fazer override e
testar condition codes.
Ÿ "positional-parm" - Deve presceder todos os demais parâmetros e pode
conter um dos seguintes valores:

PGM= {program-name} {*.stepname.ddname}


{*.stepname.procstepname.ddname}
{JCLTEST} {JSTTEST}
{PROC=procedure-name} {procedure-name}

4.2.1.1Exemplos

//STEP4 EXEC PGM=DREC,PARM='3018,NO'

(Nesse exemplo está se executando o programa DREC que recebe alguns


parâmetros necessários à sua execução)

//FOR EXEC PROC=PROC489,


// ACCT=DB1528,RD.PSTEP2=RNC,DEV=3350

(Nesse exemplo, está se executando a procedure catalogada PROC489, o


ACCT se aplica a toda a procedure; o RD só se aplica ao PSTEP2; e se está
atribuindo o valor "3350" para o simbólico &DEV)

//FOR EXEC PROC489,ACCT=DB1528,


// RD.PSTEP2=RNC,DEV=3350

(Esse exemplo é igual ao anterior, apenas mostrando que a palavra


PROC= pode ser omitida).
48
4.2.1Parâmetro ACCT
Serve para estabelecer parâmetros de account que serão passados
para as rotinas próprias da instalação.

ACCT.procstepname=(accounting-info)

Ÿ "accounting-info" - São as informações de accounting e não podem


exceder a 142 caracteres.

4.2.1.1Exemplos

//STEP1 EXEC PGM=JP5,ACCT=(LOCATION8,'CHGE+3')

(Nesse caso, o account-info só serve para esse step)

//STP3 EXEC PROC=LOOKUP,ACCT=('/83468')

(Nesse caso, como estamos executando a proc LOOKUP, o account-info


se aplica a todos os steps dessa procedure)

4.2.2Parâmetro ADDRSPC
Indica para o sistema se o step será executado na memória virtual
(que é paginável) ou na memória real (que é não-paginável).

ADDRSPC.procstepname= {VIRT} ou {REAL}

Ÿ O default é VIRT

4.2.2.1Exemplos

//CAC1 EXEC PGM=A,ADDRSPC=VIRT

(Nesse caso, estamos especificando o default, portanto, poderíamos


omitir o parâmetro ADDRSPC)

//CAC2 EXEC PROC=B,ADDRSPC=REAL,REGION=80K

(Nesse caso, usaremos uma área de 80K da memória real).

49
4.2.3Parâmetro COND
Serve para testar condições (condition codes) para determinar se
um step será ou não executado.

COND.procstepname = (code,operator)
COND.procstep = ((code,operator,stepname.procstepname)
,(code,operator,stepname.procstepname)...
COND=EVEN
COND=ONLY

Ÿ Podem ser usadas várias condições ao mesmo tempo.


- ATENÇÃO - O COND usa o que chamamos de lógica inversa: se
todas as condições forem falsas o step será executado; se pelo
menos uma das condições for verdadeira, o step não será
executado.
Ÿ Testes contra steps não executados sempre serão considerados falsos.
Ÿ Note que return code não é a mesma coisa que abend: um return code
pode indicar um problema na execução de um step e nem por isso
resultará em abend.
Ÿ "code" - É um valor entre 0 e 4095, que será comparado contra o
return code de steps anteriores.
Ÿ "operator" - É a comparação a ser feita. Seus valores podem ser:
GT (maior que)
GE (maior ou igual a)
EQ (igual a)
LT (menor que)
LE (menor ou igual a)
NE (diferente de)
Ÿ "stepname" - Nome do step contra o qual se quer fazer o teste. Se esse
parâmetro for omitido o teste ocorrerá contra todos os steps anteriores.
Ÿ "stepname.procstep" - Nome do procstepname e stepname contra o
qual se quer fazer o teste. Se esse parâmetro for omitido o teste
ocorrerá contra todos os steps anteriores.
Ÿ "EVEN" - Determina que o step seja executado mesmo que tenha
ocorrido um abend no job.
Ÿ "ONLY" - Determina que o step seja executado somente se ocorrer um
abend no job.

4.2.3.1Exemplos

50
//STEP6 EXEC PGM=DISKUTIL,COND=(4,GT,STEP3)

(O STEP6 só será executado se o return code do STEP3 for maior


do que 3)

//TEST2 EXEC PGM=DUMPINT,


// COND=((16,GE),(90,LE,STEP1),ONLY)

(O step TEST2 só será executado se todas as 3 condições seguintes


forem verdadeiras:
a) Tiver ocorrido um abend
b) O return code de todos os steps anteriores for maior que 16
c) O return code do STEP1 for manor que 89)

4.2.4Parâmetro PARM
Usado para passar pequenos inputs para o programa.

PARM.procstep=subparameter
PARM.procstep=(subparameter,subparameter)
PARM.procstep=('subparameter',subparameter)
PARM.procstep='subparameter,subparameter'

Ÿ O tamanho máximo do parm é 100 caracteres.


Ÿ Todo o string constante do PARM será passado como um único valor
para o programa, que deve ter um processamento para recebê-lo e
separar os valores recebidos.

4.2.4.1Exemplo

//RUN3 EXEC PGM=APG22,PARM='P1,123,P2=5'

(O string P1,123,P2=5 será passado como um único valor para o


programa).

4.2.5Parâmetro PERFORM
Usado para atribuir um performance group para o step.

PERFORM.procstepname=n

Ÿ Os performance groups são definidos pelo pessoal de suporte de

51
sistema de acordo com as normas da instalação.
Ÿ "n" - É um valor qualquer entre 1 e 999
Ÿ Se o parâmetro PERFORM for especificado no statement JOB, ele tem
prescedência sobre o mesmo parâmetro especificado no EXEC.

4.2.5.1Exemplo

//STEPA EXEC PGM=ADDER,PERFORM=60


(Esse step será executado no performance group 60, desde que ele esteja
definido para a instalação).

4.2.6Parâmetro PGM
Parâmetro posicional que especifica o programa a ser executado.

PGM= {program-name }
{*.stepname.ddname }
{*.stepname.procstepname.ddname}
{JCLTEST }
{JSTTEST }

Ÿ "program-name" - Nome do programa a ser executado


Ÿ "*.stepname.ddname" - Indica um ddname de um stepname que
descreve um membro de um particionado contendo um programa a ser
executado.
Ÿ "*.stepname.procstepname.ddname" - Idem, quando o ddname está
num procstepname diferente.

4.2.6.1Exemplos

//JOB8 JOB ,BOB,MSGLEVEL=(2,0)


//JOBLIB DD DSN=DT12.LIB4,DISP=(OLD,PASS)
//STEP1 EXEC PGM=USCAN

(Nesse exemplo o programa USCAN será procurado inicialmente na


biblioteca DEPT12.LIB4 e depois nas bibliotecas do sistema)

//PROCESS JOB ,MARY,MSGCLASS=A


//CREATE EXEC PGM=IEWL
//SYSLMOD DD DSN=&&PARTDS(PROG),
// UNIT=3350,DISP=(MOD,PASS),
// SPACE=(1024,(50,20,1))

52
//GO EXEC PGM=*.CREATE.SYSLMOD

(Nesse exemplo o programa PROG sofre uma linkedição e no step GO


ele será executado usando-se um referback)

4.2.7Parâmetro PROC
Indica o nome de uma procedure catalogada ou in-stream a ser executada.

{PROC=procedure-name}
{procedure-name }

Ÿ Esse parâmetro é posicional


Ÿ "procedure-name" - Especifica a procedure a ser executada.

4.2.7.1Exemplos

//SP3 EXEC PROC=PAYWKRS

(Esse exemplo mostra a execução da procedure PAYWLRS)

//SP3 EXEC PAYWKRS

(Esse exemplo é igual ao anterior, apenas não foi usada o


parâmetro PROC=, porém seu efeito é o mesmo)

4.2.8Parâmetro REGION
Especifica a área na memória real ou virtual a ser usada para a execução
do programa.

REGION.procstepname= {valueK} ou {valueM}

Ÿ "valueK" - É o tamanho da área de memória especificado em múltiplos


de 1024 bytes.
Ÿ "valueM" - É o tamanho da área de memória especificado em
megabytes (1024 * 1024 bytes)
Ÿ Se esse parâmetro for especificado como 0K ou 0M, o programa usará
toda a memória disponível.
Ÿ Se o parâmetro REGION for especificado no statement JOB, ele terá
prescedência sobre o mesmo parâmetro especificado no statements

53
EXEC.

4.2.8.1Exemplos

//STP EXEC PROC=ABC,ADDRSPC=REAL,REGION=40K


(Nesse exemplo a procedure ABC terá à sua disposição 40K de
memória real)

//STP6 EXEC PGM=CONT,REGION=120K

(Nesse exemplo o programa CONT terá à sua disposição 120K de


memória virtual)

//STP9 EXEC PGM=XYZT,REGION=0M

(Nesse exemplo o programa XYZT terá à sua disposição toda


memória virtual disponível no momento da sua execução)

4.2.9Parâmetro TIME
Usado para especificar o limite de tempo de processamento de um step.

TIME.procstepname= {(minutes,seconds)}
{1440 }
{NOLIMIT }
{MAXIMUM }
{0 }

Ÿ "minutes" - Tempo especificado em minutos


Ÿ "seconds" - Tempo especificado em segundos
Ÿ "NOLIMIT" - Indica que o step pode usar quanto tempo quizer.
Equivale a especificar TIME=1440
Ÿ 1440 - É o número de minutos de um dia. Como o contador de tempo é
zerado na mudança de dia, especificar TIME=1440 indica que o step
pode usar o tempo que for necessário.
Ÿ "MAXIMUM" - Permite que um step use até 357912 minutos.
Ÿ "0" - Determina que o step tem à sua disposição o tempo restante do
step anterior.

4.2.9.1Exemplos

//STEP1 EXEC PGM=GRYS,TIME=(12,10)

54
(Especifica que o STEP1 pode executar, no máximo, durante 12
minutos e 10 segundos)

//FOUR EXEC PGM=JPLUS,TIME=(,30)

(Especifica que o step FOUR deve executar em 30 segundos)

4.3Statements IF/THEN/ELSE/ENDIF
Esse grupo de statements é usado para executar condicionalmente um ou
mais steps de um job.

//name IF (expression) THEN comments


.
. action when expression is true
.
//name ELSE comments
.
. action when expression is false
.
//name ENDIF comments

Ÿ "name" - Opcional. Se for codificado, segue as mesmas regras do


ddname
Ÿ "expression" - São relacionamentos entre valores que serão
determinados como falsos ou verdadeiros.
Ÿ Abaixo segue uma lista dos operadores relacionai e seus sginificados.
NOTA:- Eles estão por por ordem de prescedência.
- NOR ou ¬ (Não)
- GT ou > (Maior que)
- LT ou < (Menor que)
- NG ou ¬> (Não maior que)
- NL ou ¬< (Não menor que)
- EQ ou = (Igual a)
- NE ou ¬= (Diferente de)
- GE ou >= (Maior ou igual a)
- LE ou <= (Menor ou igual a)
- AND ou & (E, operador lógico)
- OR ou | (Ou, operador lógico)

Ÿ Abaixo uma relação das palavras chaves usadas no relacionamento

55
- RC (indica um return code)
- ABEND ( indica ocorrência de um abend)
- ¬ABEND (indica a não ocorrência de um abend)
- ABENDCC (indica um system ou user completion code)
- RUN (indica se um determinado step começou a execução)
- ¬RUN (indica se um determinado step não começou a execução)

Ÿ Steps não executados, sempre serão ignorados na avaliação da


expressão
Ÿ RC, stepname.RC, stepname.procstepname.RC - A primeira forma
testa o return code de todos os steps anteriores; as duas outras testam o
return code de determinado step
Ÿ ABEND, ABEND=TRUE, step.ABEND, step.ABEND=TRUE,
step.procstep.ABEND, step.procstep.ABEND=TRUE - As duas
primeiras formas testam a ocorrência de um abend em qualquer um dos
steps anteriores; as demais formas testam a ocorrência de abend em
steps específicos.
Ÿ ¬ABEND, ABEND=FALSE, ¬step.ABEND, step.ABEND=FALSE,
¬step.procstep.ABEND, ¬step.procstep.ABEND=FALSE - As duas
primeiras formas testam a não ocorrência de abend em nenhum dos
steps anteriores; as demais formas testam a não ocorrência de abend
em steps específicos.
Ÿ ABENDCC=Sxxx, ABENDCC=Uxxxx, step.ABENDCC=Sxxx,
step.ABENDCC=Uxxxx, step.procstep.ABENDCC=Sxxx,
step.procstep.ABENDCC=Uxxxx - As duas primeiras formas testam a
ocorrência de um system (S) ou user (U) abend contra todos os steps
anteriores; as demais formas fazem os mesmos testes contra steps
específicos
Ÿ step.RUN, step.RUN=TRUE, step.procstep.RUN,
step.procstep.RUN=TRUE - Testam se um determinado step começou
a rodar.
Ÿ ¬step.RUN, step.RUN=FALSE, ¬step.procstep.RUN,
step.procstep.RUN=FALSE - Testam se um determinado step não
começou a executar.

4.3.1.1Exemplos

//IFBAD IF (ABEND | STEP1.RC > 8) THEN


ou
//IFBAD IF (ABEND OR STEP1.RC GT 8) THEN
.
.
//IFTEST2 IF (RC > 4 & RC < 8) THEN
or
//IFTEST2 IF (RC GT 4 AND RC LT 8) THEN

56
//JOBA JOB ...
//STEP1 EXEC PGM=RTN
//IFBAD IF (ABEND | STEP1.RC > 8) THEN
//TRUE EXEC PROC=ERROR
//IFBADEND ENDIF
//NEXTSTEP EXEC PROC=CONTINUE

(Esse exemplo mostra o uso de IF/THEN sem o ELSE)

//JOBB JOB ...


//STEP1 EXEC PGM=RTN
.
.
//IFBAD IF (ABEND | STEP1.RC > 8) THEN
//TRUE EXEC PROC=ERROR
// ELSE
//IFBADEND ENDIF
//NEXTSTEP EXEC PROC=CONTINUE

(Esse exemplo mostra o uso do ELSE nulo

//JOBC JOB ...


//STEP0 EXEC PGM=RTN1
//IFTEST2 IF (RC > 4 & RC < 8) THEN
//* *** WARN CONDITION REPORTING GROUP ***
//STEP1 EXEC PGM=IEFBR14
//REPORT EXEC PROC=REPTRTN
//* *** WARN CONDITION REPORTING GROUP END ***
// ELSE
//ERRORSTP EXEC PROC=ERRORTN
//ENDTEST2 ENDIF
//NEXTSTEP EXEC PROC=CONTINUE

(Esse exemplo mostra a execução de dois steps no THEN e um


step no ELSE)

//JOBF JOB ...


//STEP1 EXEC PGM=...
//IFTEST6 IF ¬ABEND THEN
//STEP2 EXEC PGM=...
//STEP3 EXEC PGM=...
// ELSE
//STEP4 EXEC PGM=...

57
// ENDIF

(Esse exemplo mostra a execução do STEP2 e do STEP3 se não ocorrer


abend; e do STEP4 se ocorrer abend)

4.4Statement INCLUDE
Indica o ponto do JCL onde deve ser incluído um membro de um
PDS como parte do próprio JCL.

//name INCLUDE MEMBER=name comments

Ÿ "name" - Nome de um membro de um particionado


Ÿ O statement INCLUDE deve estar exatamente no lugar onde o membro
deve ser incluído como parte do JCL.

4.4.1.1Exemplos

O seguinte texto de JCL está na biblioteca CAMPBELL.SYSOUT.JCL e


foi gravado com o membername SYSOUT2.

//* THIS INCLUDE GROUP IS CATALOGED AS...


//* CAMPBELL.SYSOUT.JCL(SYSOUT2)
//SYSOUT2 DD SYSOUT=A
//OUT1 OUTPUT DEST=POK,COPIES=3
//OUT2 OUTPUT DEST=KING,COPIES=30
//OUT3 OUTPUT DEST=MCL,COPIES=10
//* END OF INCLUDE GROUP...
//* CAMPBELL.SYSOUT.JCL(SYSOUT2)

Quando o sistema executar o seguinte JCL

//TESTJOB JOB ...


//LIBSRCH JCLLIB ORDER=CAMPBELL.SYSOUT.JCL
//STEP1 EXEC PGM=OUTRTN
//OUTPUT1 INCLUDE MEMBER=SYSOUT2
//STEP2 EXEC PGM=IEFBR14

Teremos a submissão do seguinte JCL

//TESTJOB JOB ...


//LIBSRCH JCLLIB
ORDER=CAMPBELL.SYSOUT.JCL
58
//STEP1 EXEC PGM=OUTRTN
//* THIS INCLUDE GROUP IS CATALOGED AS...
//* CAMPBELL.SYSOUT.JCL(SYSOUT2)
//SYSOUT2 DD SYSOUT=A
//OUT1 OUTPUT DEST=POK,COPIES=3
//OUT2 OUTPUT DEST=KING,COPIES=30
//OUT3 OUTPUT DEST=MCL,COPIES=10
//* END OF INCLUDE GROUP...
//* CAMPBELL.SYSOUT.JCL(SYSOUT2)
//STEP2 EXEC PGM=IEFBR14

4.5Statement JCLLIB
Identifica uma biblioteca onde estão gravadas as procedures e os
membros usados nos INCLUDEs (identifica uma proclib particular).

//name JCLLIB ORDER=(library,library...) comments

Ÿ Só pode existir um único statement JCLLIB por job


Ÿ "name" - Opcional. Segue as regras do ddname.
Ÿ "library" - Determina até 15 dsnames de bibliotecas onde podem estar
os strings de JCL
Ÿ As bibliotecas serão pesquisadas na ordem em que estão.

4.5.1.1Exemplos

//MYJOB1 JOB ...


//MYLIBS1 JCLLIB ORDER=CAMPBEL.PROCS.JCL
//S1 EXEC PROC=MYPROC1

(Nesse exemplo o sistema procura a procedure MYPROC1


primeiramente na CAMPBELL.PROCS.JCL e depois na SYS1.PROCLIB,
ou outras bibliotecas do sistema)

//MYJOB2 JOB ...


//MYLIBS2 JCLLIB ORDER=(BEL.PROCS.JCL,
// X.PROCS,YUILL.PROCS.JCL,
// GARY.PROCS.JCL)
//S2 EXEC PROC=MYPROC2
//INC2 INCLUDE MEMBER=MYINC2

(Esse exemplo mostra o uso de várias bibliotecas no mesmo statement


JCLLIB)
59
4.6Statement JOB
Marca o início de um job e fornece algumas orientações e opções
que valem para a execução de todo o job.

//jobname JOB positional-param,keyword-param...


//jobname JOB

Ÿ "jobname" - É mandatório. Pode ter até 8 caracteres alfanuméricos,


sendo que o primeiro deve ser alfabético ou nacional (@ # $)

4.6.1Parâmetro de Accounting Information


Parâmetro posicional serve para fornecer informações de
accounting.

(account-number,accounting-information...)

Ÿ O tamanho máximo desse parâmetro é 143 posições.


Ÿ Os parâmetros devem vir separados por vírgulas.
Ÿ Todo parâmetro que contiver um caráter não alfanumérico deve vir
entre apóstrofes. Por exemplo: (12A75,'DEPT/D58',706)
Ÿ É bastante comum cada instalação ter rotinas que processam esses
parâmetros e que provocarão JCL ERROR em caso de especificação
errada.
Ÿ O accounting-info tem o seguinte formato

(pano,room,time,lines,cards,forms,copies,log,linect)

Ÿ A omissão de qualquer um desses parâmetros deve ser indicada por


uma vírgula.
Ÿ "pano" - até 4 dígitos alfanuméricos indicando o accounting number do
analista.
Ÿ "room" - até 4 caracteres indicando a sala do analista.
Ÿ "time" - indica o tempo estimado, em minutos para a execução do job.
Ele difere do parâmetro TIME porque, se esse tempo for excedido o
JES envia mensagem, mas não cancela o job, enquanto que se o

60
parâmetro TIME for excedido ocorrerá abend.
Ÿ "lines" - especifica o número (em múltiplos de 1000) de linhas de
sysout que se espera que o job gere.
Ÿ "cards" - idem para cartões perfurados.
Ÿ "forms" - código de formulário que o JES deve usar para impressão
das sysouts.
Ÿ "copies" - número de cópias da sysout.
Ÿ "log" - especifica se o JES deve ou não (Y ou N) imprimir a job log.
Ÿ "linect" - número de linhas a serem impressas por página.

4.6.1.1Exemplos

//JOB43 JOB D548-8686

(Não foram usados parêntesis porque só temos o account-number)

//JOB44 JOB (D548-8686,'12/8/85',PGMBIN)

(Os parêntesis foram usados porque, além do account-number, temos


account-information)

//JOB45 JOB (CFH1,2G14,15,,,,2)

(Aqui temos um exemplo de account-informatio para o JES2)

4.6.2Parâmetro ADDRSPC
Indica para o sistema se o job todo deve usar memória real ou
virtual

ADDRSPC= {VIRT} {REAL}

Ÿ O default é VIRT
Ÿ Se esse parâmetro for codificado tanto no statement EXEC como no
JOB, tem prescedência o codificado no statement JOB.

4.6.2.1Exemplos

//PEH JOB ,BAKER,ADDRSPC=VIRT

//DEB JOB ,ERIC,ADDRSPC=REAL,REGION=100K

61
4.6.3Parâmetro CLASS
Determina qual a classe de execução de um job.

CLASS=jobclas

Ÿ "jobclass" - Um valor entre 0 e 9 ou de A a Z.

4.6.3.1Exemplo

//SETUP JOB 1249,SMITH,CLASS=M

4.6.4Parâmetro COND
Determina condições para que um job continue executando: se
nenhuma das condições for satisfeita, a execução continua; se uma delas for
satisfeita, a execução será suspensa.

COND=(code,operator)
COND=((code,operator),(code,operator)...)

Ÿ Podem ser estabelecidas até 8 condições.


Ÿ "code" - É um valor entre 0 e 4095, contra o qual o return code de cada
step será testado.
Ÿ "operator" - Pode ter um dos seguintes valores
- GT (maior que)
- GE (maior ou igual a)
- EQ (igual a)
- LT (menor que)
- LE (menor ou igual a)
- NE (diferente de)

4.6.4.1Exemplos

//TYPE JOB (611,402),BOURNE,COND=(7,LT)

(Esse exemplo determina que assim que um step do job emitir um return
code maior que 7, a execução do job deve ser suspensa)

//TEST JOB 501,BAXTER,COND=((20,GE),(30,LT))

62
(Esse exemplo determina que enquanto os return codes emitidos pelos
steps desse job estiverem entre 21 e 30 o processamento deve continuar;
qualquer valor fora dessa faixa determina que a execução deve ser suspensa)

4.6.5Parâmetro MSGCLASS
Atribui uma classe de sysout para o job log.

MSGCLASS=class

Ÿ O nível de informações a serem gravadas no job log depende do


parâmetro MSGLEVEL.
Ÿ "class" - Tem um valor entre 0 e 9, A a Z, especificando a classe de
sysout.

4.6.5.1Exemplos

//EXMP1 JOB ,GEORGE,MSGCLASS=F

//EXMP2 JOB ,MENTLE,MSGLEVEL=(2,0)

(Nesse exemplo, devido à omissão do parâmetro, o job log será dirigido


para a classe default (conforme especificado pela instalação))

4.6.6Parâmetro MSGLEVEL
Determina o nível de informações que serão gravadas no job log.

MSGLEVEL=(statements,messages)

Ÿ "statements" - Pode ter um valor entre 0 e 2 e determina quais


statements serão gravados no job log:
- 0 - Statement JOB
- 1 - Todos os statements de JCL, statements de controle do JES,
statements de procedure e mensagens indicando o valor atribuído
aos simbólicos.
- 2 - Somente o JCL submetido e statements de controle do JES.
Ÿ "messages" - Pode ter o valor 0 ou 1 e indica quais mensagens devem
ir para o job log.
- 0 - Somente mensagens de JCL. Mensagens do JES e do operador
só serão impressas se ocorrer abend.

63
- 1 - Mensagens de JCL, JES, do operador e do SMS.

4.6.6.1Exemplos

//EXMP3 JOB ,GEORGE,MSGLEVEL=(2,1)

//EXMP4 JOB ,MENTLE,MSGLEVEL=0

4.6.7Parâmetro NOTIFY
Usado para notificar do fim do processamento (normal ou anormal)
do job

NOTIFY={nodename.userid} {userid}

Ÿ "nodename" - Nome do node onde está o userid a ser notificado.


Ÿ "userid" - Nome do userid a ser notificado
Ÿ Normalmente, por default, quando esse parâmetro é omitido, o userid
que submeteu o job será notificado.

4.6.7.1Exemplos

//SIGN JOB ,TKLOMP,NOTIFY=VMNODE.VMUSERID

(Nesse caso usamos o nome do node, porque o userid está num node
diferente daquele em que o job foi processado)

//SIGN JOB ,TKLOMP,NOTIFY=MVSUSER

(Nesse caso usamos apenas o userid porque ele está no mesmo node em
que o job foi processado.)

4.6.8Parâmetro PASSWORD
Usado para especificar a password do user que está submetendo o
job ou para trocá-la.

PASSWORD=(password,new-password)

Ÿ IMPORTANTE - A especificação explícita de uma password (embora


ela não apareça em nenhuma listagem) pode representar um risco de

64
segurança, portanto, tome cuidado ao usar esse parâmetro.
Ÿ Codifique sempre o parâmetro USER junto com o parâmetro
PASSWORD.
Ÿ "password" - Especifica a password que está em vigor no momento.
Ÿ "new-password" - Especifica a password que passará a vigorar a partir
do término do job.

4.6.8.1Exemplos

//TEST1 JOB 'D83,123456',PASSWORD=ABCDE,USER=MYNAME

//TEST2 JOB 'D83,123456',PASSWORD=(BCH,A12),USER=RAC1

(Nesse caso o user RAC1 está trocando a password atual (BCH) por uma
nova password (A12))

4.6.9Parâmetro Nome do Programador


Parâmetro posicional (normalmente mandatório) que identifica o
responsável pelo job.

Ÿ Deve estar imediatamente após o accounting information


Ÿ Esse parâmetro pode ter, no máximo, 20 caracteres.

4.6.9.1Exemplos

//APP JOB ,G.M.HILL

(A vírgula antes da letra "G" indica a omissão do accounting


information)

//ABC JOB (AE02,SAWR),'DEP1 JOSE',


// MSGCLASS=X,MSGLEVEL=(1,1)

(Nesse caso o nome do programador foi colocado entre apóstrofes


porque há um branco entre o nome do departamento e o nome do analista)

4.6.10Parâmetro PRTY
Atribui prioridade de seleção para o job. Jobs com prioridade mais
alta serão selecionados primeiro para execução.

PRTY=priority

65
Ÿ "priority" - Um valor entre 0 e 15 que determina a prioridade de
seleção do job na fila de entrada.

4.6.10.1Exemplo

//JOBA JOB 1,'JIM WEBSTER',PRTY=12

4.6.11Parâmetro REGION
Estabelece o tamanho da área de memória real ou virtual
disponível para cada step dentro do job.

REGION= {valueK} ou {valueM}

Ÿ "valueK" - Estabelece a área em múltiplos de kilobytes (1K = 1024


bytes)
Ÿ Se esse valor não for múltiplo de 4 ele será arredondado para o
próximo múltiplo. Assim a alocação de 13K será arredondada para
16K.
Ÿ "valueM" - Estabelece a área em múltiplos de megabytes (1M =
1024*1024 bytes)
Ÿ Se o parâmetro region for especificado tanto no statement EXEC
quanto no statement JOB, prevalece o do JOB.
Ÿ A especificação de 0M ou 0K dá para o job toda a memória disponível
no momento de execução.

4.6.11.1Exemplo

//ACCT1 JOB A23,SMITH,REGION=100K,ADDRSPC=REAL

(Todos os steps desse job terão à sua disposição uma área de 100K de
memória real)

4.6.12Parâmetro RESTART
Estabelece para o sistema em qual step deve ser começada a
execução do job

RESTART= {* }
{stepname }
{stepname.procstepname}

66
Ÿ "*" - O job deve começar a partir do primeiro step.
Ÿ "stepname" - Nome do step onde deve começar a execução do job.
Ÿ "stepname.procstepname" - Idem para quando o job executa uma proc.

4.6.12.1Exemplos

//LINES JOB '1/17/85',RESTART=COUNT

(Esse job começará sua execução a partir do step COUNT)

//CLIP5 JOB ,COLLINS,RESTART=(PAY.WEEKLY)

(Esse job deve começar sua execução no procstepname PAY e no step


WEEKLY)

4.6.13Parâmetro TIME
Especifica o limite de tempo que pode ser usado pelo job.

TIME= {(minutes,seconds)}
{1440 }
{NOLIMIT }
{MAXIMUM }

Ÿ "minutes" - Valor entre 0 e 357912 especificando o tempo em minutos.


Ÿ "seconds" - Valor entre 0 e 59 especificando o tempo em segundos.
Ÿ "NOLIMIT" - O job usará o tempo que for necessário
Ÿ "1440" - Equivale a NOLIMIT
Ÿ "MAXIMUM" - Estabelece o limite em 357912 minutos
Ÿ Todo job tem de ter um limite de tempo. Se esse parâmetro for
omitido, será usado o valor default da instalação.

4.6.13.1Exemplos

//STD1 JOB ACCT271,TIME=(12,10)

(Esse job deverá ser executado em 12 minutos e 10 segundos)

//TYPE41 JOB ,GORDON,TIME=(,30)

(Esse job deverá ser executado em 30 segundos)

67
4.6.14Parâmetro TYPRUN
Determina o tipo de processamento a ser adotado para o job.

TYPRUN= {HOLD } {SCAN }

Ÿ "HOLD" - Ao ser submetido o job ficará preso na fila de entrada; ele


só estará disponível para seleção pelo sistema a partir do momento em
que o operador emitir um comando liberando-o.
Ÿ "SCAN" - Ao ser submetido, o sistema apenas confere a sintaxe do
JCL, e libera seu job log sem executar o job.

4.6.14.1Exemplo

//LIST JOB ,HUBBARD,TYPRUN=HOLD

(Esse job ficará na fila até que o operador o libere para seleção)

4.6.15Parâmetro USER
Identifica para o sistema o userid que está submetendo o job.

USER=userid

Ÿ "userid" - Identificação do userid que está submetendo o job

4.6.15.1Exemplo

//TEST JOB 'D83,123456',USER=MYNAME,PASSWORD=ABCD

4.7Statement OUTPUT
Especifica as opções para o processamento de sysouts.

//name OUTPUT parameter,parameter...

Ÿ Essas especificações só serão aplicadas para sysouts que referenciem


explicitamente o statement OUTPUT

68
Ÿ Esse statement é especialmente útil quando se processa uma mesma
sysout de várias maneiras diferentes.
Ÿ "name" - Atribui um nome para uma série de opções. Esse nome será
usado posteriormente no processamento de sysouts.

4.7.1Parâmetro ADDRESS
Usado para colocar endereço no separator, para facilitar a
distribuição de sysouts.

ADDRESS= {('delivery address','delivery address'...)}


{delivery-address }

Ÿ "delivery address" - Podem ser especificados até 4 delivery address,


cada um deles com até 60 caracteres.

4.7.1.1Exemplo

//O0 OUTPUT ADDRESS=('J. Plant','1234 Main Street',


// 'POUGHKEEPSIE, NY','zipcd')

Essa especificação fará com que o seguinte texto apareça no separator

J. Plant
1234 Main Street
POUGHKEEPSIE, NY
zipcd

4.7.2Parâmetro BUILDING
Identifica no separator o prédio para onde a sysout deve ser
enviada.

BUILDING= {'building identification'}


{building-identification }

Ÿ "building identification" - Um texto com até 60 caracteres


identificando para onde deve ser enviada a sysout.

4.7.2.1Exemplo

69
//OUTDS3 OUTPUT BUILDING='920'

4.7.3Parâmetro CLASS
Atribui uma classe de saída para uma sysout.

CLASS= {class} {*}

Ÿ "class" - Um caráter alfanumérico, identificando a classe de saída.


Ÿ "*" - Indica que a sysout deve ir para a classe que foi especificada no
parâmetro MSGCLASS do statement JOB.

4.7.3.1Exemplos

//OUTDS6 OUTPUT CLASS=D


//O1 DD SYSOUT=(,),
// OUTPUT=*.OUTDS6

(O arquivo gerado em OUT1 vai para a classe D)

//PRINTALL JOB ACCT123,MAEBIRD,


// MSGCLASS=H
//STEP1 EXEC PGM=PRINTER
//OUTDS7 OUTPUT CLASS=*
//OUTPTR DD SYSOUT=(,),
// OUTPUT=*.OUTDS7

(Nesse caso a sysout gerada em OUTPTR vai para a classe H)

4.7.4Parâmetro CONTROL
Especifica que cada registro da sysout começa por um caráter de
controle, o que deve ser usado espacejamento simples, duplo ou triplo entre
linhas.

CONTROL= {PROGRAM}
{SINGLE }
{DOUBLE }
{TRIPLE }

Ÿ "PROGRAM" - Cada registro é começado por um caráter de controle.

70
Ÿ "SINGLE" - Espacejamento simples
Ÿ "DOUBLE" -Espacejamento duplo
Ÿ "TRIPLE" - Espacejamento triplo

4.7.4.1Exemplo

//OUTDS9 OUTPUT CONTROL=TRIPLE

(As linhas serão impressas usando-se espacejamento triplo)

4.7.5Parâmetro COPIES
Indica o número de cópias de uma sysout a serem emitidas.

COPIES= {nnn }
{(nnn,(group-value,group-value...))}
{(,(group-value,group-value...)) }

Ÿ "nnn" - Número de 1 a 255 indicando o número de cópias.


Ÿ "group-value" - Número de 1 a 255 indicando quantas cópias de cada
página devem ser feitas antes que se passe para a impressão da
próxima página.

4.7.5.1Exemplos

//RPTDS OUTPUT COPIES=4

(Serão impressas 4 cópias da sysout)

//EXPLD OUTPUT COPIES=(,(3))

(Nesse caso serão impressas 3 cópias da primeira página, depois 3 cópias


da segunda, depois 3 cópias da terceira, e assim por diante)

4.7.6Parâmetro DEFAULT
Indica se um statement OUTPUT é ou não default.

DEFAULT= {YES} {Y }
{NO } {N }

71
Ÿ Se esse parâmetro for omitido, o default é NO.

Exemplo

//EXMP2 JOB ACCT555,MAEBIRD,MSGCLASS=B


//OUT OUTPUT
DEFAULT=YES,DEST=DAL
//OUTPOK OUTPUT DEST=POK
//STEP1 EXEC PGM=REPORT
//OUTHERE OUTPUT CLASS=D
//WKRPT DD UNIT=VIO,DISP=(,PASS)
//RPT1 DD SYSOUT=(,),
// OUTPUT=*.OUTHERE
//RPT2 DD SYSOUT=A
//STEP2 EXEC PGM=SUMMARY
//OUTHQ OUTPUT DEFAULT=YES,DEST=HQ
//WKDATA DD UNIT=VIO,
// DISP=OLD,DSN=*.STEP1.WKRPT
//MONTH DD SYSOUT=(,),
// OUTPUT=*.STEP1.OUTHERE
//SUM DD SYSOUT=A
//FULRPT DD SYSOUT=A,
// OUTPUT=(*.OUTDAL,*.OUTPOK)

(Nesse exemplo, toda sysout que não contiver o parâmetro


OUTPUT terá as especificações do statement OUTDAL que foi
determinado como sendo o default)

4.7.7Parâmetro DEPT
Especifica no separator a identificação do departamento que deve
receber a sysout.

DEPT= {'department identification'}


{department-identification }

Ÿ "department identification" - Texto de até 60 caracteres identificando o


departamento para onde vai a sysout.

4.7.7.1Exemplo

//OUTDS4 OUTPUT DEPT='DEPARTAMENTO DE TRANSITO'

72
4.7.8Parâmetro DEST
Indica um destino para uma sysout.

DEST=destination

Ÿ "destination" - Pode ter um dos seguintes valores


- LOCAL|ANYLOCAL - Qualquer device local
- 'IP:ipaddr' | 'nodename.IP:ipaddr' - Usado para TCP/IP destination
- name - Identifica o nome simbólico de um destinatário, conforme
definições locais
- Nnnnn - Identifica um node
- NnnnnRmm - Identifica um node e uma work station remota
- userid - Identifica um userid local que deve receber a syout.
- nodename.userid - Indica um userid que deve receber uma sysout e
o node onde ele está.
- Rnnnn RMnnnn RMTnnnn - Indica uma workstation remota que
deve receber a sysout.

4.7.8.1Exemplos

//REMOT3 OUTPUT DEST=NODEXX.USER01

(Nesse caso a sysout será mandada para o USER01 que está no node
chamado NODEXX)

4.7.9Parâmetro DUPLEX
Indica se uma sysout deve ou não usar ambos os lados da página.

DUPLEX={NO } {N }

Ÿ NO ou N - Usa só um lado da página.

4.7.9.1Exemplo

//OUTDUP OUTPUT DUPLEX=NO

4.7.10Parâmetro LINECT
Indica o número de linhas que deve ser impresso por página

73
LINECT=nnn

Ÿ "nnn" - Valor entre 0 e 255 indicando o número de linhas por página


Ÿ LINECT=0 - Faz que o JES não salte de página quando o seu limite de
linhas por página for atendido.

4.7.10.1Exemplo

//PRNTDS OUTPUT LINECT=45

4.7.11Parâmetro NAME
Indica, no separator, o nome da pessoa a quem deve ser entregue a
sysout.

NAME= {'preferred name'} {preferred-name }

Ÿ "preferred name" - String com até 60 caracteres indicando o nome

4.7.11.1Exemplo

//OUTDS7 OUTPUT NAME='R. ROPER'

4.7.12Parâmetro PRTY
Indica a prioridade de saída de uma sysout.

PRTY=nnn

Ÿ "nnn" - Valor entre 0 e 255 indicando a prioridade de saída.

4.7.12.1Exemplo

//OUTDS7 OUTPUT NAME='R. ROPER',PRTY=5

4.7.13Parâmetro ROOM

74
Faz com que saia no separator informações sobre a sala onde uma
sysout deve ser entregue.

ROOM= {'room identification'} {room-identification }

4.7.13.1Exemplo

//OUTDS8 OUTPUT ROOM='SALA DE REUNIAO'

4.7.14Parâmetro TITLE
Cria, no separator, um título para a sysout.

TITLE= {'description of output'} {description-of-output }

Ÿ "description of output" - String com até 60 caracteres descrevendo o


relatório

4.7.14.1Exemplo

//OUTDS5 OUTPUT TITLE='RELATORIO ANUAL'

4.8Statement PEND
Marca o fim de uma procedure in-stream

//name PEND comments

4.9Statement PROC
Marca o início de uma procedure e atribui valores default para os
parâmetro simbólicos.

//name PROC parameter comments

75
Ÿ "name" - Nome da procedure. Pode ser omitido em procedures
catalogadas mas é mandatório em procedures in-stream, pois o
statement EXEC usará esse nome.
Ÿ "parameter" - É a atribuição de valores defaults para os parâmetros
simbólicos. Nessa situação, o parâmetro simbólico deve aparecer sem
o caráter "&".

4.9.1.1Exemplo

//DEF PROC STATUS=OLD,


// LIB=SYSLIB,NUM=777777
//NOTIFY EXEC PGM=ACCUM
//DD1 DD DSN=MGMT,
// DISP=(&STATUS,KEEP),UNIT=3400-6,
// VOLUME=SER=888888
//DD2 DD DSNAME=&LIB,
// DISP=(OLD,KEEP),UNIT=3350,
// VOLUME=SER=&NUM

76
5 Statements de controle do JES2
São statements colocados logo após o statemen JOB para controlar
o job.

5.1Statement de comando do JES2


Usado para emissão de comandos do JES2 durante a submissão de
um job.

/*$command-verb,operand,operand... N

Ÿ Esse statement é executado no momento em que é lido e não no


momento em que começa a execução do job
Ÿ "$" - É o caráter de comando do JES2
Ÿ "command-verb" - Pode ter um dos seguintes valores
$A $E $I $O $T
$B $F $L $P $TRACE
$C $G $M $R $VS
$D $H $N $S $Z
Ÿ "operand" - São os operandos próprios do comando
Ÿ "N" (na coluna 72) - O comando não será repetido na console.

5.1.1.1Exemplos

/*$SI3-5

(Assim que o job for lido será dado start nos initiators 3, 4 e 5)

/*$TRDR1,H=Y

(Todos os jobs lidos pela RDR1 serão colocados em hold)

5.2Statement MESSAGE
Envia uma mensagem para a console do operador assim que o job
for lido.

/*MESSAGE message

77
Ÿ Se esse statement estiver depois do /*ROUTE XEQ, a mensagem será
emitida no node onde o job vai ser executado e não onde ele for lido.

5.2.1.1Exemplo

/*MESSAGE AVISE RAMAL 2345 - JOB XYZ FOI SUBMETIDO

5.3Statement NOTIFY
Envia uma notificação sobre um job para um userid

/*NOTIFY {nodename.userid }
{nodename:userid }
{nodename/userid }
{nodename(userid)}
{userid }

Ÿ As quatro primeiras formas são usadas quando o userid está num node
diferente daquele em que o NOTIFY está sendo executado
Ÿ A última forma é usada para notificação local.

5.3.1.1Exemplos

/*NOTIFY VMNODE.VMUSER

/*NOTIFY TSOUSER

5.4Statement ROUTE
Usado para especificar destino de sysouts não direcionadas pelo
parâmetro DEST ou para identificar o node onde um job deve ser executado

78
/*ROUTE {PRINT} {ANYLOCAL} {PUNCH} {LOCAL}
{name }
{Nnnnn} {NnnRmmmm} {NnnnRmmm}
{NnnnnRmm }
{nodename.userid } {nodename:userid }
{nodename/userid } {nodename(userid)}
{Rnnnn} {RMnnnn} {RMTnnnn}
{Unnnn} {Userid}

/*ROUTE XEQ {name }


{Nnnnn }
{nodename.vmguestid }
{nodename:vmguestid }
{nodename/vmguestid }
{nodename(vmguestid)}

Ÿ "PRINT" - Indica que o arquivo é uma sysout a ser impressa


Ÿ "PUNCH" - Indica que o arquivo é uma sysout perfurada.
Ÿ "XEQ" - Indica que o arquivo é um job a ser executado.
Ÿ "ANYLOCAL" "LOCAL" - Indica um local node num local deveice
Ÿ "name" - Fornece o nome simbólico de um device ou node, definido
pelo statement JES2 DESTID
Ÿ "Nnnnn" - Identifica um node.
Ÿ "NnnRmmmm" "NnnnRmmm" "NnnnnRmm" - Identifica um node e
uma remote workstation conectados ao node local.
Ÿ nodename.userid, nodename:userid, nodename/userid, nodename
(userid)" - Identifica um node e um userid de destino.
Ÿ "Rnnnn, RMnnnn, RMTnnnn" - Identifica um terminal remoto.
Ÿ "Unnnn" - Identifica um terminal local com routing especial.
Ÿ "Userid" - Identifica um userid local.
Ÿ Esse statement deve ser colocado antes do primeiro statement EXEC

5.4.1.1Exemplos

/*ROUTE PRINT RMT6

(A sysout será enviada para o terminal remoto 6)

//JOBB JOB ...


/*ROUTE XEQ DENVER
79
//STEP1 EXEC ...

(Esse job será executado num node chamado de DENVER


imediatamente após ter sua sintaxe validada)

5.5Statement SETUP
Discrimina volumes que o operador devem montar antes do início
da execução do job.

/*SETUP serial-number,serial-number...

Ÿ Usando esse statement o job ficará preso na fila até que o operador
monte os volumes e libere o job.
Ÿ "serial-number" - Volser dos volumes a serem montados
Ÿ Esse statement deve ficar antes do primeiro statement EXEC.

5.5.1.1Exemplo

/*SETUP 666321,149658

5.6Statement XEQ
Determina o node onde o job deve ser executado. Tem o mesmo
efeito que o statement /*ROUTE XEQ

/*XEQ {Nnnnn} {nodename.vmguestid} {name}

Ÿ "Nnnnn" - Identifica um node number onde o job deve ser executado


Ÿ "nodename" - Fornece o nome do node no qual o job será executado.
Ÿ "vmguestid" - Identifica um MVS rodando sob um VM.
Ÿ "name" - Identifica um nome definido localmente dentro da JES2-
defined destination.
Ÿ Esse statement deve ficar antes do primeiro statement EXEC.

5.6.1.1Exemplo

//JOBB JOB ...


/*XEQ ATLANTA

80
//STEP1 EXEC ...

(Esse job deve ser executado num node conhecido como


ATLANTA).

81
6 Como se monta um job?
1) Começe sempre pelo statement JOB
- Ele marca para o sistema o início de um string de JCL
- Toda mensagem, passada para o operador será identificada pelo
jobname.
- Seu JCL, mensagens, substituições de simbólicos, etc, são
agrupadas no spool com o nome igual ao seu jobname.
- O jobname será usado nas notificações enviadas para os vários
destinatários de mensagens.
2) Coloque em seguida todos os statements que se referem ao job como
um todo (statements JOBLIB, JOBCAT, JCLLIB, OUTPUT, etc).
3) Coloque os vários statements EXEC (de programa ou de procedure)
pois eles indicam para o sistema o que vai ser processado.
4) Entre os statements EXEC coloque os statements DD que descrevem
para o sistema os arquivos que servirão como entrada e saída de cada
processamento.
5) Distribua os statements de comentário à vontade dentro do seu string de
JCL.
6) Genéricamente isso é o principal em qualquer job. Outros statements
são úteis, embora pouco usados.

Veja o exemplo abaixo

//JOB001 JOB (AE02,SAWR),'SAWR PEDRO',


// MSGCLASS=X,
// CLASS=B,NOTIFY=USER99,MSGLEVEL=(1,1)
//STEP1 EXEC PGM=IEBCOPY
//****************************************************
//* CRIA BACK UP DE BIBLIOTECA
//****************************************************
//SYSPRINT DD SYSOUT=*
//SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,5),RLSE)
//INP DD DISP=SHR,DSN=XXX.BIBL.FONTES
//OUT DD DISP=(,CATLG,DELETE),
// DSN=XXX.BIBL.FONTES.BKP,
// UNIT=SYSDA,VOL=SER=DISCO1,
// DCB=XXX.BIBL.FONTES,
// SPACE=(CYL,(10,5,300),RLSE)
//SYSIN DD *
COPY INDD=((INP,R)),OUTDD=OUT

82
DSNAME, 29
0 DUMMY, 31
$, 81 DUPLEX, 77
*, 17 E
¬ABEND, 58 ELSE, 57
¬RUN, 58 ENDCNTL, 49
A ENDIF, 57
ABEND, 58 EVEN, 52
ABENDCC, 58 EXEC, 49
Accounting Information, 62 EXPDT, 31, 33
ACCT, 50 F
ADDRESS, 72 FREE, 32
ADDRSPC, 51, 64 H
AMP, 17 HOLD, 32, 71
ANYLOCAL, 83 I
Asterisco, 17 IF, 57
AVGREC, 19 INCLUDE, 60
B J
Backward References, 9 JCL na listagem, 12
BLKSIZE, 20 JCLLIB, 61
BUILDING, 73 JOB, 62
C JOBCAT, 46
Campos de JCL Statement, 8 JOBLIB, 46
CHKPT, 20 jobname, 62
CLASS, 64, 73 L
CNTL, 15, 21 LABEL, 33
CNTL/ENDCNTL, 21, 49 LIKE, 34
comando do JES2, 81 LINECT, 77
Comentário, 14 LOCAL, 83
COMMAND, 14 LRECL, 35
COND, 51, 65 M
Continuação, 9 MAXIMUM, 56, 70
CONTROL, 74 MESSAGE, 81
COPIES, 21, 74 MGMTCLAS, 35
D Modificando Procedures, 11
DATA, 22 MSGCLASS, 65
DATACLAS, 23 MSGLEVEL, 66
DCB, 24 N
DD, 16 NAME, 77
DDNAME, 26 NOLIMIT, 56, 70
DEFAULT, 75 Nome do Programador, 68
DEPT, 76 NOTIFY, 67, 82
DEST, 26, 76 O
DISP, 27 ONLY, 52
DLM, 29 ORDER, 61
DOUBLE, 74 OUTPUT, 36, 72
DSN, 29 Override, 12
P T
PARM, 53 THEN, 57
PASSWORD, 67 TIME, 56, 70
PEND, 79 TITLE, 79
PERFORM, 53 TRIPLE, 74
PGM, 50, 54 TYPRUN, 71
PRINT, 83 U
PRIVATE, 43 UNIT, 42
PROC, 50, 55, 79 USER, 71
Procedure Catalogada, 11 V
Procedure In-stream, 11 VIRT, 51, 64
PROGRAM, 74 VOL, 43
PROTECT, 37 VOLUME, 43
PRTY, 68, 78 X
PUNCH, 83 XEQ, 83, 84
R
RC, 58
REAL, 51, 64
RECFM, 37
REF, 43
REGION, 55, 69
RESTART, 69
RETAIN, 43
RETPD, 33, 38
ROOM, 78
ROUTE, 82
RUN, 58
S
SCAN, 71
SER, 43
SETUP, 84
Simbólicos, 12
SINGLE, 74
Sintaxe de Parâmetros, 9
SPACE, 38
SPIN, 40
Started Tasks, 13
STEPCAT, 46
STEPLIB, 47
stepname, 49
STORCLAS, 40
SYSABEND, 47
SYSCHK, 48
SYSIN, 48
SYSMDUMP, 47
SYSOUT, 41
SYSUDUMP, 47

Você também pode gostar