Escolar Documentos
Profissional Documentos
Cultura Documentos
-1-
-2-
HBOUND...........................................................................................................................................................................................18
PLIRETC............................................................................................................................................................................................19
DATE.................................................................................................................................................................................................19
TIME..................................................................................................................................................................................................19
17. RECURSOS DE DEBUG...............................................................................................................................................................19
SUBSCRIPTRANGE.........................................................................................................................................................................19
CHECK...............................................................................................................................................................................................19
18. PARMETROS DE JOB..............................................................................................................................................................20
-3-
Identificao do programa
DECLARE
arquivos ,
campos ,
PICTUREs de edio ,
tabelas ,
estruturas ,
inicializaes ,
redefinies ,
funes (BUILT-IN) ,
rotinas externas;
Declarao de variveis
ON CONDITIONS ;
Tratamento de condies
COMANDOS ;
movimentaes ;
expresses ;
concatenao ;
condies ;
LOOPs ;
manipulao de arquivos ;
manipulao de banco de dados ;
chamadas de rotinas internas;
chamadas de rotinas externas;
COMANDOS ;
Comandos / Instrues
ROT-LABEL: PROC ;
Identificao da
Sub-rotina interna
END ROT-LABEL ;
Finalizao da
Sub-rotina interna
END LABEL ;
Finalizao do programa
O comentrio em PL/I dever estar codificado entre os caracteres "/*" (abre comentrio) e os caracteres "*/"
(fecha comentrio)
O comentrio PL/I poder ser condificado em qualquer ponto do fonte e poder ser de uma ou mais linhas
-4-
3. IDENTIFICAO DO PROGRAMA
PROGRAMA PRINCIPAL
label : PROC (parmetro) OPTIONS (MAIN);
-- PROGRAMA -END label;
Label:
4. DECLARAES
5.1. DECLARAO DE ARQUIVOS
DCL <identificao> FILE <tipo> <operao> ENV (<DCB> <opes>);
IDENTIFICAO
a mesma identificao (DDNAME) utilizada no carto DD do JCL
DCL ARQENT FILE ...;
|
|
//ARQENT DD DSN=...
TIPO
RECORD arquivo tipo registro
STREAM arquivo tipo cadeia
OPERAO
UPDATE leitura/atualizao
DCB
Formato do Registro que pode ser:
F Fixo
FB - Fixo Blocado
V Varivel
VB - Varivel Blocado
Clusula RECSIZE Define-se o tamanho do registro
Ex.: DCL ARQ FILE RECORD INPUT ENV (F RECSIZE(100));
-5-
OPES
TOTAL Otimizao das rotinas de leitura e gravao
CTLASA Indica que o caracter de espacejamento est colocado na primeira posio da linha de impresso.
Caracteres Vlidos:
' '
imprime na linha seguinte
'0'
salta uma linha
'-'
salta duas linhas
'1'
salta para a pgina seguinte
'+'
imprime na mesma linha
Ex.: DCL ARQENT FILE RECORD INPUT ENV (FB RECSIZE(100) TOTAL);
Ex.: DCL RELAT FILE RECORD OUTPUT ENV (FB RECSIZE(133) CTLASA);
5.2. DECLARAO DE CAMPOS
DCL <identificao> <ocorrncia> <tipo> (<tamanho><,decimais>)
<alocao> INIT(<inicializao>);
IDENTIFICAO
29 caracteres de nome NO podendo iniciar por nmero
Caracteres alfabticos (A ~ Z), numricos (0 ~ 9) e alguns caracteres especiais ('#', '@', '$' e '_')
TIPO
CHARACTER (CHAR) - alfanumrico
PICTURE (PIC) numrico zonado
DECIMAL FIXED (FIXED) numrico compactado
DECIMAL FLOAT (FLOAT) numrico ponto flutuante
BINARY FIXED (BIN FIXED) numrico binrio
POINTER endereo
TAMANHO
CHAR de 1 32767
Ex.: CHAR(10)
PIC de 1 a 15 (inclusive decimais)
Ex.: PIC '(15)9'
pic '(13)9V99' - 15 dgitos onde 13 inteiras e 2 decimais
FIXED de 1 a 15 (inclusive decimais)
Ex.: FIXED(15)
FIXED(15,2) 15 dgitos onde 13 inteiras e 2 decimais
FLOAT de 1 a 33 (no h decimais)
Ex.: FLOAT(06)
BIN FIXED 15 (2 bytes) ou 31 (4 bytes) (no h decimais)
Ex.: BIN FIXED(15) / BIN FIXED(31)
No utilizar para operaes de multiplicao e diviso com campos que contenham decimais.
POINTER tamanho implicitamente definido (4 bytes)
Ex.: POINTER
BIT utilizado para testes lgico / zero (0) falso e 1 (um) verdadeiro)
Ex.: BIT(01)
-6-
OCORRNCIA
Definio de tabela (ARRAY)
ndices variando de 32766 a 32767
Unidimensional
Ex.: TAB(10) 10 ocorrncias (de 1 a 10)
TAB(-4:10) 15 ocorrncias (de 4 a 10 inclusive 0)
Multidimensional at 9 dimenses
Ex.: TAB(10,10) / TAB(5,5,5)
TAB(-4:10,5,20,10)
INICIALIZAO
Clusula INIT
Alfanumrico INIT(' ') / INIT('
Ex.: CHAR(15) INIT(' ')
Numrico INIT(0)
Ex.: FIXED(15) INIT(0) / PIC'(09)9' INIT(12345)
BIT INIT('0'B) / INIT('1'B)
Ex.: BIT(1) INIT('0'B) / INIT('1'B)
Tabela alfanumrica
Ex.: TAB(5) CHAR(15) INIT((5)(01)' ') / INIT((05)(' ')) /
INIT('A','B','C','D','E')
Obs: TAB(5) CHAR(15) INIT((5)(01)' ')
|
|
FATOR DE INDEXAO
FATOR DE REPETIO
Inicializao durante execuo: TAB(*) = ' ';
Tabela numrica
Ex.: TAB(5) FIXED(15) INIT((5)0) / INIT(1,2,3,4,5)
Inicializao durante execuo: TAB(*) = 0;
Tabela multidimensional
Ex.: TAB(2,2) FIXED(15) INIT((4)0) / INIT(1,2,3,4)
| | | |
ocorrncia (1,1) | | |
ocorrncia (1,2) | |
ocorrncia (2,1) |
ocorrncia (2,2)
Inicializao durante execuo: TAB(*,*) = 0;
EXEMPLOS DE DECLARAO
DCL AGENCIA
DCL NOME_DA_AGENCIA
DCL TAB$CONTA(10)
@AGENCIA(10)
Tipo do campo
Alfa 10 bytes
Zonado 13 inteiros e
2 decimais
Compactado 13
inteiros e 2 decimais
Manual de PL/I Bsico
PIC '(04)9'
CHAR(45)
FIXED(07)
CHAR(45)
INIT(0);
INIT(' ');
INIT((10)0),
INIT((10)('NOME DA AGENCIA'));
PL/I
CHAR (10)
PIC (13)9V(02)9
Cobol
PIC X(10).
PIC 9(13)V99.
Natural
(A10)
(N13,2)
FIXED (15,2)
(P13,2)
-7-
Binrio 2 bytes
BIN FIXED(15)
(B02)
1234
COM SINAL
PIC '(03)9T' ou PIC '999T'
X
TAM
CHAR(10) VAR,
BIN FIXED(15) DEF X;
X = 'ABC'
X = 'ABCDE'
-> TAMANHO DE X = 3
-> TAMANHO DE X = 5
5.6. ESTRUTURAS
Os sub-nveis devem descrescer mas no necessita ser de modo sequencial
EX. 1 ENTRADA,
1 ENTRADA,
2 AGENCIA PIC '(4)9',
3 AGENCIA
PIC'9999',
2 CONTA
PIC '(7)9',
3 CONTA
PIC'(07)9',
2 NOME
CHAR (40),
3 NOME
CHAR(40),
2 ENDERECO,
3 ENDERECO,
3 RUA
CHAR (30),
5 RUA
CHAR(30),
3 NUMERO PIC '(6)9',
5 NUMERO PIC'(06)9',
2 DATA
CHAR (6),
3 DATA
CHAR(06),
-8-
5.8. REDEFINIO
EX. C_P_F
PIC '(12)9'
EX. CPF
CHAR (12)
DEF C_P_F,
DATA
CHAR(08),
1 DATAS,
1 DATAS
DEF DATA,
2 DIA
2 DIA
PIC '99',
2 MES
2 MES
PIC '99',
2 ANO
2 ANO
PIC '9999',
DATA
EX. 1 CADASTRO,
2 NOME
CHAR(45),
2 ENDERECO,
3 RUA
CHAR(25),
3 NUMERO
PIC '99999',
2 COMPLEMENTO,
RUA_NUMERO
CHAR(30) DEF ENDERECO,
PIC '99',
PIC '99',
PIC '9999',
CHAR(08) DEF DATAS,
-9-
5. COPY-BOOK (INCLUDE)
SINTAXE
%INCLUDE MAC01 (<nome do COPY-BOOK>);
EX. DCL 1 AGE,
%INCLUDE MAC01 (GEAGEAG);
7. MANIPULAO DE ARQUIVO
8.1. ARQUIVO TIPO "RECORD"
ABRIR/FECHAR
OPEN
OPEN
CLOSE
CLOSE
FILE
FILE
FILE
FILE
(ARQUIVO1);
(ARQUIVO1), FILE (ARQUIVO2);
(ARQUIVO1);
(ARQUIVO1), FILE (ARQUIVO2);
LEITURA
READ FILE (ENTRADA) INTO (AREA);
READ FILE (ENTRADA) SET (P);
GRAVAO
WRITE FILE (SAIDA) FROM (AREA);
- 10 -
GRAVAO
PUT DATA------Imprime o nome e o contedo do campo
EX. PUT DATA (NOME,VALOR);
DADOS: NOME = 'JOAO', VALOR = 339
EX. PUT DATA;
CUIDADO:
83.4
8. DESVIO INCONDICIONAL
Comando para fazer um desvio do fluxo de execuo para um LABEL qualquer especificado no comando.
GO TO <LABEL>;
EX. IF CNT > 10 THEN
GO TO ULTRAPASSOU_LIMITE;
...
...
ULTRAPASSOU_LIMITE: --COMANDOS
- 11 -
9. ATRIBUIO
ATRIBUIO SIMPLES
CAMPO = VALOR;
ATRIBUIO MLTIPLA
PAG, NPAG = NPAG + 1;
ATRIBUIO POR IGUALDADE DE NOME (opo BY NAME)
Movimentao das variveis de uma estrutura para outra que possuam os mesmos nomes de variveis
SAIDA = VALOR, BY NAME;
ATRIBUIO POR QUALIFICAO DE NOME
Movimentao de variveis que possuem o mesmo nome em estruturas ou nveis diferentes.
SAIDA.VALOR = ENTRADA.VALOR * 100;
10.
EXPRESSES E OPERAES
OPERANDOS ARITMTICOS:
Exponenciao:
**
Ex: A = A ** 3
Multiplicao:
*
Ex: A = B * C
Diviso:
/
Ex: A = B / C
Adio:
+
Ex: A = B + C
Subtrao:
Ex: A = B - C
Concatenao:
||
Ex: A = 'AB', B = 'CD', C = A || B
C = 'ABCD'
OPERANDOS DE COMPARAO:
Igual:
=
Ex: IF A = 0 THEN
Negativa:
Ex: IF (A = 0) THEN
BIT STRING: DCL FIMARQ BIT(01) INIT('0'B);
IF FIMARQ THEN
Diferente:
=
Ex: IF A = 0 THEN
Maior que:
>
Ex: IF A > 0 THEN
Menor que:
<
Ex: IF A < 0 THEN
>=
Ex: IF A >= 0 THEN
<=
Ex: IF A <= 0 THEN
No maior que:
>
Ex: IF A > 0 THEN
No menor que:
<
Ex: IF A < 0 THEN
- 12 -
E (AND):
&
Ex: IF A = 0 & B = 0 THEN
Ou (OR):
|
Ex: IF A = 0 | B = 0 THEN
11.
OPERAES DE COMPARAO
As operaes de comparaes so feitas da esquerda para a direita BIT a BIT.
COMPARAO ENTRE CHARACTER
A comparao feita da esquerda para a direita, sendo um caracter dos operandos menor que o outro o
campo preenchido direita com brancos para comparao.
COMPARAO ENTRE BIT STRING
A comparao feita da esquerda para a direita com dgitos binrios, sendo um dos operandos menor o
campo preenchido direita com zeros binrios.
COMPARAO NUMRICAS
A comparao feita pelo valor nmerico dos operandos.
12.
COMANDO "IF"
Comando para comparao e tomada de ao de acordo com a veracidade da condio. (THEN verdade /
ELSE falso).
SINTAXE
IF --<condio>-- THEN --<comando>--;
ELSE --<comando>--;
- 13 -
13.
COMANDO "SELECT"
Comando de tomada de deciso e ao em uma estrutura de "CASE" de acordo com o valor ou a veracidade da
condio. (verdade executa / falso testa o prximo valor ou condio).
SINTAXE
SELECT (<campo>);
WHEN (<valor> ou <condio>) --<comando>--;
...
WHEN (<valor> ou <condio>) --<comando>--;
OTHERWISE --<comando>--;
END;
EXEMPLO
SELECT (A);
WHEN (1,2) B = A * 2;
WHEN (3)
B = A / 2;
OTHERWISE B = 0;
END;
SELECT;
WHEN (A = 1 | A = 2) B
WHEN (A = 3)
B = A /
OTHERWISE B = 0;
END;
14.
Executa se A = 1 ou A = 2
Executa se A = 3
Executa se A <= 0 ou A > 3
= A * 2;
2;
COMANDO "DO"
AGRUPAMENTO
IF --CONDICAO- THEN
DO;
--COMANDOS--;
END;
ELSE
DO;
--COMANDOS--;
END;
SELECT
WHEN (...) DO;
--COMANDOS--;
END;
...
OTHERWISE DO;
--COMANDOS--;
END;
END;
REPETITIVO
Executa as instrues vrias vezes quanto definido no limite de repetio especificado no comando onde a
varivel de controle de repetio incrementado de acordo com o valor de incremento definido tambm no
comando. O valor de incremento quando no especificado assume-se o valor 1.
DO I = 0 TO 10 BY 2;
Executa 6 vezes com iterao de 2
--COMANDOS--;
unidades
END;
- 14 -
VARIAVEL
Executa as instrues vrias vezes quantas definidas pela quantidade de valores de atribuio
especificados no comando.
DO I = 1,7,9,5,11;
--COMANDOS--;
END;
CONDICIONAL WHILE
Executa os comandos enquanto a condio especificada no comando for verdadeira.
DO WHILE (--CONDICAO--);
--COMANDOS--;
END;
CONDICIONAL UNTIL
Executa as instrues at que a condio especificada no comando se torne verdadeira. Executa ao
menos uma vez, pois o teste de validao da condio feita no final.
DO UNTIL (--CONDICAO--);
--COMANDOS--;
END;
CONDICIONAL MISTO
Combinaes dos processos repetitivos descritos anteriormente.
DO COD = 1 TO 10 WHILE (--CONDICAO--);
--COMANDOS--;
END;
15.
BLOCOS
So conjuntos de comandos em PL/I que servem para informar ao compilador a necessidade de tratamento
especial durante a compilao, alm da simples traduo dos comandos que contm.
Os blocos do linguagem a caracterstica de se poder fazer alocao dinmica de memria. As variveis
alocadas no incio da execuo ou ativao de um bloco so desalocadas ao seu trmino.
Existem dois tipos de bloco: "PROCEDURE" e "BEGIN".
BEGIN
O nome (rtulo/LABEL) para estes tipo de blocos opcional pois so ativados na sequncia que
aparecem no programa.
PROCEDURE
Todo programa composto de pelo menos 1 bloco "PROCEDURE", o bloco principal (a MAIN
PROCEDURE).
Obrigatoriamente estes blocos devem ter nome (rtulo/LABEL) para poderem ser ativados. Os blocos que
no sejam o bloco principal so mais conhecidos como sendo uma sub-rotina interna.
Este tipo de bloco pode haver definies de variveis locais e de manipulao de parmetros.
A execuo destes blocos so feitos atravs do comando "CALL". Logo estes blocos no precisam ser
"SALTADOS" pela lgica do programa para atingir o final do programa.
- 15 -
- 16 -
16.
:
:
:
:
:
P11
P111
P12
P121
P12
P12
P12
P11
P11
P11
QUEM USA
:
:
:
:
:
V1
V1
V1
V1
V1
V11
V11 V111
V12
V12 V121
QUEM: P1
P11
P111
P12
P121
P1
P11
P111
P12
P121
FUNES - BUILTIN
ARITMTICAS
MULTIPLY(A,B,I,J)
Fornece o resultado da multiplicao entre "A" e "B" com a preciso de clculo interno de "I" dgitos com "J"
decimais
EX. RESULTADO = MULTIPLY(NUMERO1,NUMERO2,15,5);
DIVIDE(A,B,I,J)
Fornece o resultado da diviso entre "A" e "B" com a preciso de clculo interno de "I" dgitos com "J" decimais
EX. RESULTADO = DIVIDE(NUMERO1,NUMERO2,15,5);
MOD
Fornece o resto de uma diviso.
EX. RESTO = MOD(NUMERO,DIVISOR);
IF MOD(ANO,4) = 0 THEN MENSAGEM = 'ANO BISSEXTO';
ROUND
ROUND(X1,X2) retorna o valor arredondado de X1, X2 indicando em qual casa a direita ser efetuado o
arredondamento
- 17 -
TRATAMENTO DE STRING
VERIFY(A,B)
Retorna a posio no STRING "A" do primeiro caracter ou BIT que no est no STRING "B". Se todos os
caracteres em "A" esto em "B" o resultado zero.
EX. X = VERIFY(CAMPO,'ABHNR');
SE CAMPO = 'BRANCO' -> X = 5
SE CAMPO = 'BANHA'
-> X = 0
IF VERIFY(NUM,'0123456789') = 0 THEN
MENSAGEM = 'NUM NAO NUMERICO';
INDEX(A,B)
Retorna a posio inicial do STRING "B" dentro do STRING "A", retorna zero se o mesmo no est presente.
EX. DCL LETRA CHAR(10) INIT('ABCDEFGHI'),
X = INDEX(LETRA,'E') -> X = 5
Y = INDEX(LETRA,'DE') -> Y = 4
SUBSTR(A,B,C)
A - CAMPO
B - POSIO INICIAL
C - QUANTIDADE DE DGITOS
Permite o acesso a uma parte de um campo para exame ou modificao do seu contedo. Se "C" omitido o
resto do STRING includo.
EX. DCL CAMPO CHAR(10) INIT('012345ABCD'),
SUBSTR(CAMPO,5,3) = 'XYZ'; --> CAMPO = 01234XYZBCD
LENGTH
LENGTH (X1) retorna um valor igual ao comprimento de X1.
HIGH(N)
Retorna um caracter STRING de tamanho n com o caracter de mais alto valor em hexadecimal "FF".
EX. DCL CAMPO CHAR (06),
CAMPO = HIGH(06);
LOW(N)
Retorna um caracter STRING de tamanho n com o caracter de mais baixo valor em hexadecimal "00".
EX. DCL CAMPO CHAR (06),
CAMPO = LOW(06);
TRATAMENTO DE ARRAYS
LBOUND
LBOUND (X1,N) retorna o valor de limite inferior da "N-esima" dimensao do "array" especificado como
argumento
EX. DCL TAB (-2:13,-5:5) CHAR (06),
CAMPO = LBOUND(TAB,2); -> CAMPO = -5
HBOUND
HBOUND (X1,N) retorna o valor de limite superior da "N-esima" dimensao do "array" especificado como
argumento.
EX. DCL TAB (-2:13,-5:5) CHAR (06),
CAMPO = HBOUND(TAB,1); -> CAMPO = 13
- 18 -
OUTROS
PLIRETC
Permite ao programa passar um cdigo de retorno para os cartes de controle. Seta o "COND CODE" do STEP
do JOB com o valor especificado.
EX. DCL COND BIN FIXED(31) STATIC INIT(0),
IF --CONDICAO-- THEN COND = 1;
ELSE COND = 2;
CALL PLIRETC (COND);
DATE
Fornece a data do dia no formato ano-ms-dia (CHAR(06) - AAMMDD).
EX. DCL DATA CHAR(06),
DATE BUILTIN;
DATA = DATE;
---> DATA = 010227
********
TIME
Fornece o horrio no formato hora-minuto-segundo-milsimo de segundo (CHAR(09) - HHMMSSMMM).
EX. DCL HORA CHAR(09),
TIME BUILTIN;
HORA = TIME;
---> HORA = 091033683
17.
RECURSOS DE DEBUG
SUBSCRIPTRANGE
Usado para verificar se houve estouro de alguma tabela dentro do programa, quando detectado a invaso de
rea a execuo interrompida.
EX. /*
PROGRAM
PROGRAMA EXEMPLO
USERID */
(SUBRG):
DICONS: PROC OPTIONS (MAIN);
---ON SUBRG BEGIN;
PUT DATA (I,J,K);
---END;
CHECK
Controla variveis do programa, listando-as a cada execuo de instrues onde elas aparecem.
EX. /* PROGRAMA
PROGRAMA EXEMPLO
USERID
*/
(CHECK):
FCINTRV: PROC OPTIONS (MAIN);
/* PROGRAMA
PROGRAMA EXEMPLO
USERID
*/
(CHECK(FATOR,TAXA,RAZAO)):
ABTOTS: PROC OPTIONS (MAIN);
- 19 -
18.
PARMETROS DE JOB
So informaes passadas ao programa atravs do carto JCL "EXEC" atravs de da opo "PARM"
O parmetro no JCL dever ser informado como mostrado no exemplo seguinte:
//
EXEC PGM=PROGRAMA,PARM='<parmetros>'
|
V
O PARAMETRO DEVER SER INFORMADO AQUI
No programa dever estar codifica como mostrado a seguir, sendo o parmetro declarado obrigatoriamente
como VARYING. O tamanho mximo de parmetro que pode ser enviado do JOB para a aplicao de 100
bytes.
PROGRAMA: PROC (PARAMETRO) OPTIONS (MAIN);
DCL
PARAMETRO
CHAR (10) VAR,
1 PARM_DEF
DEF PARAMETRO,
2 TAMANHO
BIN FIXED(15),
2 CAMPO
CHAR (10);
...
IF TAMANHO = 0 THEN ... /* faltou passar parmetro */
ELSE
IF CAMPO = 'PARAMETRO1' THEN
...
- 20 -