Macros Adabas

Embed Size (px)

Citation preview

ndice1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 14.1. 14.2. 15. 15.1. 15.2. 15.3. 15.4. 15.5. 15.6. 15.7. 15.8. 15.9. 15.10. 15.11. 15.12. 15.13. 15.14. 15.15. 15.16. 15.17. 15.18. 15.19. 15.20. 15.21. 15.22. 15.23. 15.24. 16. 16.1. 16.2. 16.3. 16.4. Conceitos Viso Geral da Macros ADABAS Sintaxe Convenes Palavras Reservadas Macros Declarativas Identificao do Usurio USERID / Programa Definio de Dados Tipos de ARQ GRP CPO CNT SUP (SP, |sa|) Tratamento de Erros Erro %@ROTER = myrot Macros ADABAS ABRIR FECHAR TODOS PRIM Leitura em Seqencia Lgica de um Descritor Leitura em Sequncia Lgica de um Sub ou Superdescritor Leitura em Sequncia Fsica OBTER PROX POR REPOR TIRAR RELCIDD ENDTRA BACTRA CHECKPOINT PARA HISTOGRAMA ERROHISTOGRAMA OHISTOGRAMA Exemplo de Uso de Histograma NOMEPGM Response Codes Emitidos pela Macro NOMEPGM Exemplo de Uso de NOMEPGM Mecnica de HOLD Atravs das MACROS Processamentos Especiais Lista de ISNS em que QTD > QMAX (RSP309) Uso de RELCID para Listas de ISNS onde QTD > QMAX RESTART Usando ET-VAR PRIM com "E" para CICS com RETURN TRANSID 2 3 11 11 11 11 12 12 13 13 14 18 18 19 19 20 20 20 20 20 23 23 24 24 24 25 25 25 25 25 26 26 26 26 27 27 28 28 29 29 29 30 31 31 31 33

ATENO Hoje no devem mais ser utilizadas as Macros ADABAS, pois existe o ADASQL. Os files lgicos Adabas maiores que 999 somente devero ser utilizados com a linguagem NATURAL e com o ADABAS SQL , sendo que o desenvolvedor pode usar a linguagem PLI ou Cobol para acesso/atualizao dos registros no DBMS ADABAS. No possvel sua utilizao por meio de macros.

1.

ConceitosPara a utilizao do ADABAS em programas PL/I h a necessidade de extensa e detalhada codificao: -1-

Das reas de dados e descritores, que so parametrizados nos FORMAT e RECORD BUFFERS e dos comandos bsicos, que so parametrizados nos CONTROL, SEARCH e VALUE BUFFERS No mercado, utiliza-se um software chamado ADASQL para desenvolver o tratamento de toda esta parametrizao. No REAL, foi desenvolvida pelo Suporte Tcnico uma srie de macros PL/I, que fazem todo o tratamento dos parmetros do ADABAS, de forma semelhante ao COMMAND LEVEL do CICS, antes que o ADASQL estivesse disponvel. A macros no devem mais ser utilizadas para a programao de programas novos, mas elas existem e esto presentes em programas antigos o que justifica esse manual. As MACROS PL/I funcionam com base no PRE-PROCESSADOR do PL/I COMPILAO PL/I FONTE PREPROCESSADOR FONTE INTERMEDIRIO COMPILADOR OBJETO O Pr-processador trata dois tipos de comandos: INCLUDES (copy do COBOL) - so textos utilizados por diversos programas, por exemplo, definies de arquivos, partes comuns de codificao, que so escritos uma nica vez e copiados pelos demais programas. so instrues criadas na instalao, tornando-se praticamente comandos PL/I, que so desdobradas pelo preprocessador a partir de esqueletos de rotinas previamente programados, que so alterados ou complementados em funo dos parmetros passados para a MACRO. Com estes recursos, padroniza-se a codificao, procedimentos complexos tornam-se transparentes, obtem-se economia de recursos de programao. MACROS

-2-

2.2.1.

Viso Geral da Macros ADABASInicialmente, teremos uma viso de quais so as funes desempenhadas pelas MACROS ADABAS e como utilizamos estas funes em programas PL/I. Ento, analisaremos mais profundamente quais as opes fornecidas em cada MACRO. Existem dois tipos bsicos de MACROS ADABAS: 1. identificao do usurio do BANCO de DADOS, Declarativas 2. definio de reas de dados e descritores, 3. parametrizao de alguns procedimentos, p.ex. tratamento de erros. 1. utilizadas para realizar as transaes (pesquisas, leituras, atualizaes e Executivas outras atividades) nos arquivos ADABAS. As principais MACROS declarativas so: USERID identifica o usurio do BANCO de DADOS ARQ define o FILE a ser utilizado CPO define os campos a serem tratados define os campos com quantidades de ocorrncias de campos mltiplos ou CNT peridicos (MU / PE) SUP define quais os SUB ou SUPERDESCRITORES a serem utilizados FIM delimita algumas das MACROS citadas define rotinas especiais da aplicao para tratamento de erros nas MACROS e ERRO no ADABAS As principais MACRO executivas so: ABRIR Inicializa o BANCO de DADOS FECHAR Finaliza o BANCO de DADOS TODOS TODOS 5 ISNs 005, 105, 134, 278, 870 Pesquisa nas listas invertidas a condio desejada e devolve a quantidade de registros selecionados e uma tabela com seus ISNs. Observe que esta MACRO NO acessa os registros, apenas seleciona os seus ISNs a partir das listas invertidas. PRIM PRIM ->->->->-> 005 PROX PROX ->->->->-> 105 PROX ->->->->-> 134 PROX ->->->->-> 278 PROX ->->->->-> 870 PROX ->->->->-> 000 Localiza nas listas invertidas o primeiro registro que satisfaz a condio desejada e devolve o seu ISN. Observe que esta MACRO NO acessa o registro, apenas seleciona o seu ISN a partir das listas invertidas. A MACRO PRIM utilizada em conjunto com a MACRO ADABAS PROX, que acompanha a ordem especificada na MACRO PRIM e devolve sempre o ISN do prximo registro na sequncia. De uma forma geral, a MACRO TODOS mais eficiente para a pesquisa, pois informa todos os ISNs dos registros desejados com um nico processo de acesso s listas invertidas. Contudo, a quantidade de ISNs obtidos numa pesquisa est restrito a 1000, pois at esta quantidade, os processamentos do ADABAS so realizados em memria e a partir da, utilizandose de reas auxiliares em disco. Para quantidades superiores, deve ser utilizada a MACRO PRIM acompanhada da MACRO PROX.

-3-

OBTER

Acessa os dados do registro indicado por um ISN informado. utilizada aps as MACROS TODOS, PRIM ou PROX, quando necessrio o acesso aos dados do registro aps a pesquisa. POR Inclui registros novos no BANCO de DADOS. REPOR Atualiza o registro com dados alterados no BANCO de DADOS. TIRAR Seleta registros do BANCO de DADOS. ENDTRA Encerra a transao e efetiva atualizaes no BANCO de DADOS. BACTRA Encerra a transao mas NO efetiva nenhum dos comandos efetuados pela transao no BANCO de DADOS. RELCID Libera recursos do ADABAS utilizados pelo programa de aplicao. Existem algumas estruturas de programas relacionadas com BANCO de DADOS que so normalmente utilizadas. PESQUISAS Caracterizam-se por processos em que os registros so selecionados pelo critrio de pesquisa solicitado, de forma randmica, atravs das listas invertidas definidas para o BANCO de DADOS. O programa de aplicao pode ou no acessar os dados de cada registro selecionado, conforme sua necessidade. Diferem de um processo de leitura pois os dados NO necessariamente so acessados. Por exemplo, quando consistimos a incluso de um novo registro, verificamos apenas a existncia de um registro com a mesma chave no BANCO de DADOS. Neste caso, realizado APENAS o acesso s listas invertidas. So utilizadas a MACRO TODOS ou as MACROS PRIM e PROX, conforme o tipo de pesquisa. O acesso aos dados atravs da MACRO OBTER. Normalmente utilizadas em BATCH, para programas que necessitam acessar grande parte dos registros de um FILE. Caracterizam-se por processos baseados em sequncias dos registros: FSICA Em ordem do armazenamento no prprio FILE no DATA STORAGE, sem acesso s listas invertidas. Por exemplo, para emisso de um relatrio global ou para clculo de aumento de todos os salrios. DE ISN Em ordem da sequencia de ISNs dos registros no FILE, com acesso ao ADDRESS CONVERTOR, contudo sem acesso s listas invertidas. LGICAS Em ordem da sequncia de um determinado descritor do FILE, portanto, atravs de acesso s listas invertidas. Por exemplo, quando posicionamos um arquivo em determinada agncia e acessamos todos os registros dentro desta agncia. realizado um posicionamento dentro da sequncia utilizada e a partir da, ocorrem acessos sequenciais consecutivos aos registros posteriores. Aps o acesso ao registro, por algum dos criterios j mencionados, seus dados so alterados e ser efetuado um UPDATE no BANCO de DADOS. Existem trs MACRO ADABAS utilizadas: POR Para incluses de registros no Banco de Dados REPOR Para alteraes de registros no Banco de Dados TIRAR Para delees.de registros no Banco de Dados No On-Line, normalmente teremos uma pesquisa, seguida pelo acesso aos dados, sua atualizao e o UPDATE no BANCO de DADOS, com uma das trs MACRO citadas. Neste caso, considerando um ambiente multi-user, o programa de aplicao dever ser transacional, se utilizando da mecnica de HOLD para possibilitar atualizaes concorrentes. -4-

LEITURAS SEQUENCIAIS

ATUALIZAE S

ATUALIZAE S

Seguem exemplos de programas em PL/I com MACROS ADABAS, com o objetivo de apresentar uma viso GERAL e SIMPLIFICADA da sua utilizao. Em seguida, sero detalhadas as MACROS. 2.2. Esquema para Exemplos1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 % INCLUDE MAC01 (ADABAS) ARQ(pessoal) NUM(94) QMAX(100) CPO(codigo,CO) UNPK(09) CPO(nome,NO) ALFA(40) CPO(salario,SA) ALFA(40) FIM; DCL i qtde uni_isn tab_isn(100) BIN BIN BIN BIN USO(acess) PESQ PESQ PESQ

FIXED(31), FIXED(31), FIXED(31), FIXED(31) ;

ABRIR; procedimentos_do_programa FECHAR;

LINHAS 1 2-6 8-10

13 14 15

EXPLANAO Comando para o preprocessador do PL/I inserir o include referente s MACROS ADABAS. Definio, atravs de MACROS ADABAS, do FILE a ser utilizado e dos campos necessrios. Cria os DCL's para os campos cdigo, nome e salrio. Definio normal em PL/I de: contador para loop (i). Quantidade de registros (qtde) que foram selecionados por uma MACRO ADABAS TODOS. ISN (uni_isn) de um registro selecionado por uma das MACROS ADABAS PRIM ou PROX ou que ser utilizado por uma das MACROS ADABAS de atualizao e deleo. Tabela (array tab_isn) com os ISN's dos registros selecionados por uma MACRO ADABAS TODOS. Nos exemplos seguintes sero codificados apenas os campos efetivamente utilizados. MACRO ADABAS para inicializao do BANCO de DADOS para este programa. Procedimentos do programa envolvendo a lgica de utilizao das MACROS ADABAS. MACRO ADABAS para finalizao do BANCO de DADOS para este programa.

-5-

2.3.

Pesquisa de um Registro (Obter o salrio do funcionrio 87654.)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ARQ(pessoal) NUM(94) QMAX(1) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL qtde tab_isn(1) BIN FIXED(31), BIN FIXED(31) ;

ABRIR; TODOS(pessoal) COM(codigo=87654) QTD(qtde) EM(tab_isn); IF qtde = 0 THEN CALL funcionario_nao_cadastrado ; ELSE DO OBTER(pessoal) DE (tab_isn(1)); CALL procedimentos_da_aplicacao; END; FECHAR;

LINHAS 11

15 16 2.4.

EXPLANAO MACRO ADABAS TODOS que pesquisa em PESSOAL o registro com cdigo=87654 e devolve no campo qtde a quantidade de registros encontrados e na tabela tab_isn os seus ISN's, que no nosso caso 1. Estamos considerando que no existem cdigos repetidos (unique key). Observe que a MACRO TODOS no obtm os campos (no l os registros). MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo tab_isn(1) e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos.

Pesquisa de um Grupo de Registros (listar todos os funcionrios chamados OLEGARIO)1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 ARQ(pessoal) NUM(94) QMAX(100) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL i BIN FIXED(31), qtde BIN FIXED(31), tab_isn(100) BIN FIXED(31) ; ABRIR; TODOS(pessoal) COM(nome='OLEGARIO') QTD(qtde) EM(tab_isn); IF qtde = 0 THEN CALL nenhum_Olegario ; ELSE DO i = 1 to qtde; OBTER(pessoal) DE (tab_isn(i)); CALL procedimentos_da_aplicacao; END; FECHAR;

LINHAS 12

EXPLANAO MACRO ADABAS TODOS que pesquisa em PESSOAL todos os registros com nome='OLEGARIO' e devolve no campo qtde a quantidade de registros encontrados e na tabela tab_isn os seus ISN's. Estamos considerando que existem nomes repetidos, mas no mximo cem, que o tamanho da tabela de ISN's (tab_isn). Observe que a MACRO TODOS no obtm os campos (no l os registros). -6-

15-18 16 17 2.5.

Loop destinado a acessar todos os registros selecionados MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo tab_isn(i) e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos.

Pesquisa de um Grupo de Registros com Alto Volume(listar todos os funcionrios chamados JOSE)1 2 3 4 5 7 9 10 11 12 13 14 15 16 ARQ(pessoal) NUM(94) QMAX(1) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL uni_isn BIN FIXED(31), ABRIR; PRIM(pessoal) COM(nome='JOSE') ORD(nome) EM(uni_isn); DO WHILE uni_isn = 0 OBTER(pessoal) DE (uni_isn); CALL procedimentos_da_aplicacao; PROX(pessoal) ATE (nome='JOSE') EM(uni_isn); END; FECHAR;

LINHAS 10

11-15 12 13 14

EXPLANAO MACRO ADABAS PRIM que pesquisa em PESSOAL o primeiro registro com nome=JOSE e devolve no campo uni_isn o seu ISN (posiciona no primeiro registro). Estamos considerando que existem muitos nomes repetidos, eventualmente acima de 1000. Observe que a MACRO PRIM no obtm os campos (no l os registros). Loop destinado a acessar sequencialmente os registros a serem selecionados. Observe que ISN zerado indica fim de pesquisa ou de arquivo. MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo uni_isn e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos. MACRO ADABAS que posiciona PESSOAL no prximo registro seguindo a sequncia iniciada com nome=JOSE e terminando em nome=JOSE e devolve no campo uni_isn o seu ISN. Ao atingir o fim dos registros selecionados, devolve o ISN zerado. Observe que a MACRO PROX no obtm os campos (no l os registros).

2.6.

Pesquisa de uma Faixa de Registros com Alto Volume(listar todos os funcionrios de JOSE a MARIA)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ARQ(pessoal) NUM(94) QMAX(1) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL uni_isn BIN FIXED(31),

ABRIR; PRIM(pessoal) COM(nome='JOSE') ATE(nome='MARIA') ORD(nome) EM(uni_isn); DO WHILE uni_isn = 0 OBTER(pessoal) DE (uni_isn); CALL procedimentos_da_aplicacao; PROX(pessoal) ATE(nome='MARIA') EM(uni_isn); END;

-7-

17

FECHAR;

LINHAS 10-11

12-16 13 14 15

EXPLANAO MACRO ADABAS PRIM que pesquisa em PESSOAL o primeiro registro com nome=JOSE e devolve no campo uni_isn o seu ISN. Observe que a MACRO no obtm os campos (no l os registros). Caso no codificssemos o ATE, poderamos receber um registro inicial com nome superior a MARIA. Loop destinado a acessar sequencialmente os registros a serem selecionados. Observe que ISN zerado indica fim de pesquisa ou de arquivo. MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo uni_isn e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos. MACRO ADABAS PROX que posiciona PESSOAL no prximo registro seguindo a sequncia iniciada com nome=JOSE e devolve no campo uni_isn o seu ISN. Quando atingir um nome imediatamente superior a 'MARIA', ou o fim do arquivo, devolve o ISN zerado. Observe que a MACRO no obtm os campos (no l os registros).

2.7.

Leitura de Todo o File do Banco de Dados (gerar arquivo com todos os funcionrios)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ARQ(pessoal) NUM(94) QMAX(1) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL uni_isn BIN FIXED(31),

ABRIR; PRIM(pessoal) ORD('FIS') EM(uni_isn); DO WHILE uni_isn = 0; OBTER(pessoal) DE (uni_isn); CALL procedimentos_da_aplicacao; PROX(pessoal) EM(uni_isn); END; FECHAR;

LINHAS 10

11-15 12 13 14

EXPLANAO MACRO ADABAS PRIM que acessa PESSOAL em ordem fsica, independente tanto da sequncia de ISN como de quaisquer sequncias lgicas. Observe que a MACRO no obtm os campos (no l os registros) e que NO devem ser codificadas condies (COM, ATE). Loop destinado a acessar sequencialmente os registros. Observe que ISN zerado indica fim de arquivo. MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo uni_isn e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos. MACRO ADABAS PROX que posiciona PESSOAL no prximo registro seguindo a sequncia fsica e devolve no campo uni_isn o seu ISN. Quando atingir fim de arquivo, devolve o ISN zerado. Observe que a MACRO PROX no obtm os campos (no l os registros).

2.8.

Leitura de Parte do File do Banco de Dados (gerar arquivo c/ os primeiros 300 funcionrios)1 2 3 ARQ(pessoal) NUM(94) QMAX(1) USO(acess) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ

-8-

4 5 6 7 8 9 10 11 12 13 14

CPO(salario,SA) FIM; DCL uni_isn

UNPK(11,2) PESQ BIN FIXED(31),

ABRIR; DO uni_isn = 1 to 300; OBTER(pessoal) DE (uni_isn); CALL procedimentos_da_aplicacao; END; FECHAR;

LINHAS 10-13 11 14 2.9.1 2 3 4 5 7 8 12 13 14 15 16 17 18 19 20 21

EXPLANAO Loop destinado a acessar por ordem de ISN os registros de 1 a 300. Estamos considerando que existem os 300 registros no BANCO de DADOS. Este processo de leitura raramente utilizado. MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo uni_isn e traz os campos solicitados. Procedimentos da aplicao para os dados obtidos.ARQ(pessoal) NUM(94) QMAX(1) USO(alter) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL qtde BIN FIXED(31), uni_isn BIN FIXED(31); TODOS(pessoal) COM(codigo=1233) QTD(qtde) EM(uni_isn); IF qtde = 0 THEN CALL procedimentos_de_inclusao_em_duplicata; ELSE DO; codigo = 1233; nome = 'MARAJA'; salario = 300000; POR(pessoal) EM (uni_isn); END; ENDTRA;

Incluso no On-Line (incluir o funcionrio 1233)

LINHAS 10 12

13-14 15-20 19 21

EXPLANAO Para aplicaes on-line, no se utilizam as MACROS ADABAS ABRIR e FECHAR. MACRO ADABAS TODOS que pesquisa em PESSOAL o registro com codigo=1233 e devolve no campo qtde a quantidade de registros encontrados e em uni_isn o seu ISN, se quantidade maior que 1 o ISN de menor valor. Observe que a MACRO TODOS no obtm os campos (no l os registros). Tratamento de incluso em duplicata. Procedimentos de incluso. MACRO ADABAS POR grava em PESSOAL o novo reg. e devolve o ISN em uni_isn. MACRO ADABAS ENDTRA que efetiva as transaes no BANCO de DADOS.

2.10.

Alterao no On-Line (alterar o salrio do funcionrio 1233)1 2 3 4 5 ARQ(pessoal) NUM(94) QMAX(1) USO(alter) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM;

-9-

7 8 11 12 13 14 15 16 17 18 19

DCL qtde BIN FIXED(31), uni_isn BIN FIXED(31); TODOS(pessoal) COM(codigo=1233) QTD(qtde) EM(uni_isn); IF qtde = 0 THEN CALL procedimentos_de_funcionario_nao_cadastrado; ELSE DO; OBTER(pessoal) DE (uni_isn); salario = 800000; REPOR(pessoal) DE (uni_isn); END; ENDTRA;

LINHAS 10 11

12-13 14-18 14 17 19 2.11.

EXPLANAO Para aplicaes on-line, no se utilizam as MACROS ADABAS ABRIR e FECHAR. MACRO ADABAS TODOS que pesquisa em PESSOAL o registro com codigo=1233 e devolve no campo qtde a quantidade de registros encontrados e em uni_isn o seu ISN, mas se quantidade maior que 1 o ISN de menor valor. Observe que a MACRO no obtm os campos (no l os registros). Procedimentos de funcionrio no cadastrado. Procedimentos de alterao. MACRO ADABAS OBTER que acessa o registro indicado pelo ISN contido no campo uni_isn e traz os campos solicitados. MACRO ADABAS REPOR que atualiza o registro indicado pelo ISN contido no campo uni_isn com os dados existentes nos campos do programa. MACRO ADABAS ENDTRA que efetiva as transaes no BANCO de DADOS.

Deleo no On-Line (deletar o funcionrio 1233)1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 ARQ(pessoal) NUM(94) QMAX(1) USO(alter) CPO(codigo,CO) UNPK(09) PESQ CPO(nome,NO) ALFA(40) PESQ CPO(salario,SA) UNPK(11,2) PESQ FIM; DCL qtde uni_isn BIN FIXED(31), BIN FIXED(31);

TODOS(pessoal) COM(codigo=1233) QTD(qtde) EM(uni_isn); IF qtde = 0 THEN CALL procedimentos_de_funcionario_nao_cadastrado; ELSE DO; TIRAR(pessoal) DE (uni_isn); END; ENDTRA;

LINHAS 10 11

12-13 14-16 16 17

EXPLANAO Para aplicaes on-line, no se utilizam as MACROS ADABAS ABRIR e FECHAR. MACRO ADABAS TODOS que pesquisa em PESSOAL todos os registros com codigo=1233 e devolve no campo qtde a quantidade de registros encontrados e em uni_isn o seu ISN, mas se quantidade maior que 1 o ISN de menor valor. Observe que a MACRO TODOS no obtm os campos (no l os registros). Procedimentos de funcion rio no cadastrado. Procedimentos de deleo. MACRO ADABAS TIRAR que deleta o registro indicado pelo ISN contido no campo tab_isn(1). MACRO ADABAS que efetiva as transaes no BANCO de DADOS.

- 10 -

3.

SintaxePara a utilizao das macros necessrio o comando PL/I: %INCLUDE MAC01(ADABAS); CUIDADOS IMPORTANTES As macros so POSICIONAIS, portanto devem ser utilizadas na ordem da definio apresentada. Como uma macro gera diversos comandos de PL/I, as que forem codificadas na sada de uma instruo condicional (dentro do IF), devero estar entre DO e END. IF A = 100 THEN DO; ENDTRA; END; No usar ASSIGN com BY NAME para duas estruturas quando ambas definidas para o ADABAS, pois existem campos internos com o mesmo nome e que tambm sero movidos.

4.

Convenes| < | < | . . . ( ; ) | > | > | um dos termos ou expresso deve ser especificado. a expresso ou termo deve ser especificado. a expresso ou termo opcional. a expresso ou termo pode ser repetido. delimita uma expresso ou termo. termina uma macro.

5.

Palavras ReservadasEm virtude das MACROS terem sido escritas em PL/I as seguintes palavras e expresses no podero ser usadas em programas que usem BANCO de DADOS: ABRIR E FECHAR PROGBAS ALFA EM FIM PROX ALFAV ENDTRA GRP QMAX ARQ ERROABRIR IND QTD ATE ERROOBTER NOCNT RELCID BACTRA ERROPEGAR NR REPOR BFIX ERROPOR NUM SOLTAR BDADOS ERROPRIM OBTER SUP CHECKPOINT ERROPROX ORD TIRAR CNT ERROREPOR OU TODOS COM ERROTIRAR PARA UNPK CPO ERROTODOS PEGAR UNPKV DE ETDATA PESQ USERID DFIX EXC POR USO DIM EXEC PRIM @PROGRAMA HISTOGRAMA NOMEPGM

6.

Macros DeclarativasExistem trs grupos principais: 1. dirigidas para identificao do usurio ADABAS;

- 11 -

2. dirigidas para definio da rea de dados, DESCRITORES e nmero de ocorrncias em campos mltiplos e/ou peridicos. Ou seja, elas definem a interface (control block e demais reas buffers) com o ADABAS. 3. dirigidas para definio de tratamentos de erros.

7.

Identificao do Usurio USERID / Programa|'literal' | USERID ( | ou | ) ; | variavel |

Identifica os dados do usurio (ETVAR) que vo ser obtidos por uma MACRO ABRIR ou guardados por uma das MACROS CHECKPOINT, ENDTRA ou FECHAR. Literal e varivel devero ter um tamanho mximo de 8 bytes. Normalmente, codifica-se o nome do programa. Exceo quando mais de um programa ir acessar a mesma rea.|'literal' | @PROGRAMA ( | ou | ) ; | variavel |

uma varivel do programa que deve ser usada para passar rotina de erro o nome do programa para que este seja impresso ou mostrado em terminal. Literal e varivel devero ter um tamanho mximo de 8 bytes. MUITO TIL principalmente para programas on-line.

8.

Definio de DadosARQ CPO CPO ... GRP CPO ... CPO FIM CPO ... CPO SUP CPO ... CPO FIM FIM;

Podem existir vrias declaraes de arquivo (MACRO ARQ). Cada uma poder conter vrios campos (MACRO CPO), vrios grupos de campos (MACRO GRP), e vrios campos SUB ou SUPERDESCRITORES (MACRO SUP). Um grupo de campos (MACRO GRP) poder conter vrios campos (MACRO CPO). A declarao de DESCRITORES efetuada no prprio campo, atravs da MACRO PESQ. As declaraes dos SUB ou SUPERDESCRITORES devero ser as ltimas do arquivo. - 12 -

As MACROS GRP e SUP devem ser finalizadas pela MACRO FIM. A MACRO ARQ tambm finalizada pela MACRO FIM, contudo, dever ser seguida pelo ponto e virgula (FIM;). Existem declaraes aonde o SMBOLO ADABAS associado ao nome dado varivel ou estrutura em PL/I: (xr,xa) sendo ==> AGENCIA_MATRIZ,AL associa AL a AGENCIA_MATRIZ Caso xa seja omitido, sero utilizadas as duas primeiras posies de xr. NOME_MATRIZ associa NO a NOME_MATRIZ NO PODEM EXISTIR ESPAOS ENTRE 'xr', e 'xa'. No causar erro de compilao mas causar erros de execuo.

9.

Tipos de ARQ| ALTER | ARQ(arq) |BDADOS(ap)| NUM(num) |QMAX(qmax)| USO( < EXCL > ) |NOCNT| | ACESS |

ARQ BDADOS

D nome a um arquivo do Banco de Dados e estrutura que conter os campos declarados atravs da MACRO CPO. Sigla padro de identificao da aplicao no REAL (DI, CN, etc.) do arquivo FILE que est em DB ALTERNATIVO. A sigla pode ser informada com ou sem apostrofe (DI ou 'DI') Programas que usam BDADOS exigem os seguintes cartes DD em seu JOB://DB#ap0nnDD DSN=CP.AUXLI(ADAIDnn),DISP=SHR

onde nn o nmero (DBID) que identifica o BANCO de DADOS ALTERNATIVO NUM Nmero do arquivo (FILE) do BANCO de DADOS. QMAX Quantidade mxima de registros esperada aps uma pesquisa. O limite 1000. USO Tipo de uso que se vai fazer do arquivo. ALTER O arquivo vai ser atualizado concorrentemente por vrios usurios e requer o uso da MACRO ENDTRA. EXCL O arquivo vai ser atualizado por um nico usurio. ACESS O arquivo vai ser apenas lido. Esta condioo pode ser alterada dinamicamente atravs da MACRO executiva PARA. NOCNT Informa s MACROS para NO gerarem os campos que contm o nmero de ocorrncias de campos mltiplos e grupos peridicos para esse arquivo. No utilizar ARQUIVOA = ARQUIVOB, BY NAME (Captulo Sintaxe item 2.2.) ARQ(CADAST) BDADOS(DI) NUM(32) QMAX(200) USO (ACESS) Declarar somente os campos que vo ser utilizados pelo programa. Se a atualizao de alguns campos requer a leitura de outros campos, melhor declarar o arquivo duas vezes, uma para leitura e outra para atualizao.

10.

GRPGRP(gr|,ga|) | NR < | DIM(d |:d|) | > IND(i |-i|) |

- 13 -

GRP

Nome da estrutura de dados. Gr o nome pelo qual a estrutura conhecida pelo programa e ga o nome pelo qual a estrutura conhecida pelo ADABAS. Se ga no informado os dois primeiros caracteres de gr so usados. No deve ser codificada quando o grupo conter campos mltiplos. Neste caso cada campo dever ser definido individualmente atravs da MACRO CPO. Quando declarada, TODOS OS CAMPOS PERTENCENTES AO GRUPO DEVEM SER DECLARADOS.GRP(cadastro,AL) NR

NR

A estrutura no repetitiva, ou seja, no um grupo peridico.GRP(resumo_saldos,AX) DIM(2) IND(1-2)

Os parmetros DIM e IND so utilizados quando o grupo peridico e servem para informar a dimenso do ARRAY para o PL/I e quais ocorrncias o ADABAS deve acessar. Normalmente, sempre so acessadas todas as ocorrncias. Todos os campos pertencentes a este grupo, quando utilizados no programa PL/I, devero estar subscritados. DIM Especifica a dimenso de uma estrutura em formato de 'array', ou seja, quantas ocorrncias. Pode ser codificada como a quantidade de ocorrncias, por exemplo, DIM(5), ou como um intervalo, DIM(1:5), exatamente como no PL/I. Especifica quais as ocorrncias da estrutura no arquivo, que o ADABAS deve ler ou atualizar. No BANCO de DADOS podem existir dez ocorrncias, das quais s interessam ao programa as duas ltimas. Neste caso, usaramos IND(9-10), e especificaramos duas ocorrncias na dimenso, DIM(2) ou DIM(9:10). Caso interessassem as cinco primeiras, usaramos IND(1-5) e especificaramos cinco ocorrncias na dimenso, DIM(5).

IND

Quando especificadas, a expanso das MACROS gera um campo BIN FIXED(15), no final do ARRAY, que conter o nmero total de ocorrncias do grupo para o registro acessado. Seu nome ser o do grupo seguido de '_# No exemplo acima, 'resumo_saldos_#'.

11.

CPO| | | | | CPO(cp|,ca|) |DIM(d1|,d2|) IND(i1|,i2|)| < | | | | | ALFA (tam) | ALFAV(tam) | DFIX (tam |,dec|)| > |PESQ| UNPK (tam |,dec|)| UNPKV(tam |,dec|)| BFIX |

CPO DIM

Nome do campo. cp o nome pelo qual o dado conhecido pelo programa e ca o nome pelo qual o dado conhecido pelo ADABAS. Se ca no informado os dois primeiros caracteres de cp so usados. Anloga ao da Macro GRP espesifica a dimenso, ou as duas dimenses, de uma estrutura em formato de 'array'. Cada dimenso pode ser codificada como a quantidade de ocorrncias, por exemplo, DIM(10), ou como um intervalo, DIM(1:10), exatamente como no PL/I. No caso de duas dimenses, a primeira, d1, corresponde ao grupo peridico e a segunda, d2, ao campo mltiplo contido no peridico. So separadas por uma virgula, conforme exemplos: - 14 -

DIM DIM DIM DIM

(10,2) (1:10,2) (10,1:2) (1:10,1:2)

IND

Anloga ao da Macro GRP, especifica quais ocorrncias sero lidas ou atualizadas pelo ADABAS, em cada uma das dimenses. Pode ser codificada como quantidade, IND(15), indicando ao ADABAS que as cinco primeiras ocorrncias devem ser tratadas, ou como intervalo, IND(3-7), indicando que o ADABAS deve tratar da terceira stima ocorrncia. No caso de duas dimenses, o primeiro IND, i1, corresponde ao grupo peridico e o segundo, i2, ao campo mltiplo contido no peridico. So separados por uma virgula, conforme exemplos:DIM DIM DIM DIM (10,20) (3,2) (10,6) (4,6) ou ou ou DIM(1:3,2) DIM(10,15:20) DIM(5:8,15:20) IND(1-10,1-20) IND(6-8,1-2) IND(1-10,15-20) IND(5-8,15-20)

OBS

Quando as MACROS DIM e IND so especificadas, a sua expanso gera um campo BIN FIXED(15), no final do ARRAY, que conter o nmero total de ocorrncias do campo para o registro acessado. Seu nome ser o do campo seguido de '_#'. Importante quando codificamos um campo mltiplo dentro de um grupo peridico devemos colocarmos o ARQ com a opo de NOCNT para evitar a gerao do campo '_#' que indica o nmero de ocorrncias para campos mltiplos e/ou peridicos. A codificao das MACROS ALFA, DFIX, UNPK e BFIX, deve obedecer rigorosamente o formato e tamanho dos campos definidos no BANCO de DADOS. Isto porque a MACRO definir no PL/I os campos com as caractersticas fornecidas, contudo, solicitar ao ADABAS que use o que foi definido na FDT. Qualquer divergncia causar problemas na execuo do programa, como se fosse um lay-out definido deslocado. As MACROS ALFAV e UNPKV possibilitam a utilizao de tamanhos distintos dos definidos no BANCO de DADOS, por exemplo, para USERVIEWS. ALFA O campo alfanumrico. ALFAV O campo alfanumrico. Utilizado para obter o campo com tamanho diferente do definido para o ADABAS. DFIX O campo numrico compactado. UNPK O campo numrico descompactado. O campo numrico descompactado. Utilizado para obter o campo com UNPKV tamanho diferente do definido para o ADABAS. BFIX O campo binrio com 4 bytes. PESQ O campo uma chave de pesquisa (DESCRITOR). Vamos considerar os diversos casos de definies, da situao mais simples mais complexa: 1. 2. 3. 4. 5. 6. 7. 8. simples (no mltiplo) isolado simples contido em um grupo simples contido em um grupo peridico simples contido em um grupo peridico, grupo este que no ser utilizado no programa e portanto no ser definido. mltiplo mltiplo contido em um grupo mltiplo contido em um grupo peridico mltiplo contido em um grupo peridico, grupo este que no ser utilizado no programa e portanto no ser definido.

O seguinte FILE ser utilizado como base para os exemplos: - 15 -

DB: 50 TYL --1 1 G 1 2 2 2 2 DB -AA AB G1 BA BB CA CB

FILE:

96

CONTCREDITO F LENG S D REMARKS - ---- - - ------N 3 N D N 10 N D A A A N A N A A N N N 20 16 1 2.0 N N N N D D D D

NAME ------------------------------loja codigo_cliente pessoa sobre_nome primeiro_nome sexo idade

G 1 GR endereco 2 CD logradouro M 2 BC telefone M 1 AC nome_dependentes P 1 MC credito 2 CC cartao_de_credito 2 CL limite_de_credito P 1 UT utilizacoes 2 CB saldo_utilizado M 2 DT data_utilizacoes

30 N 8 N 10 N D 18 N D 4.0 N D 4.0 N D 6 N

Simples (no mltiplo) isoladoCPO(codigo_cliente,AB) UNPK(10) PESQ

1 pessoal, ... 2 codigo_cliente PIC '9(10)', ...

Simples contido em um grupo (Todos os campos pertencentes ao grupo devem ser definidos.)GRP(pessoa,G1) NR CPO(sobre_nome,BA) CPO(primeiro_nome,BB) CPO(sexo,CA) CPO(idade,CB) FIM 1 pessoal, ... 2 pessoa, 3 sobre_nome CHAR(20) 3 primeiro_nome CHAR(16) 3 sexo CHAR(01) 3 idade PIC '9(02)' ...

ALFA(20) ALFA(16) ALFA(01) UNPK(02)

PESQ PESQ PESQ PESQ

Simples contido em um grupo peridico (Todos os campos pertencentes ao grupo devem ser definidos.)GRP(credito,MC) DIM(5) IND(1-5) CPO(cartao_de_credito,CC) CPO(limite_de_credito,CL) ALFA(18) UNPK(04) PESQ PESQ

- 16 -

FIM 1 pessoal, ... 2 credito (5), 3 cartao_de_credito CHAR(18), 3 limite_de_credito PIC '9(04)', 2 credito_# BIN FIXED(15), ...

Simples contido em um grupo peridico, grupo este que no ser utilizado no programa e portanto no ser definido.CPO(cartao_de_credito,CC) DIM(5) IND(1-5) CHAR(18) PESQ 1 pessoal, ... 2 cartao_de_credito (5) CHAR(18), 2 cartao_de_credito_# BIN FIXED(15), ...

MltiploCPO(nome_dependentes,AC) DIM(3) IND(1-3) ALFA(10) PESQ 1 pessoal, ... 2 nome_dependentes (3) CHAR(10), 2 nome_dependentes_# BIN FIXED(15), ...

mltiplo contido em um grupoO ADABAS NO ACEITA A DECLARAO DE UM MLTIPLO DENTRO DE UM TEM DE GRUPO, POIS NO TERIA COMO OBTER OS CONTADORES E NEM COMO ESPECIFICAR QUAIS OCORRNCIAS DEVERIAM SER ACESSADAS. NESTE CASO, TODOS OS CAMPOS DO GRUPO DEVEM SER DEFINIDOS ISOLADAMENTE, COM DIM (D1) e IND (I1), D1=DIMENSO DO MLTIPLO(QUANTAS), I1=OCORRNCIAS DO MLTIPLO(QUAIS).

mltiplo contido em um grupo peridicoO ADABAS NO ACEITA A DECLARAO DE UM MLTIPLO DENTRO DE UM TEM DE GRUPO, POIS NO TERIA COMO OBTER OS CONTADORES E NEM COMO ESPECIFICAR QUAIS OCORRNCIAS DEVERIAM SER ACESSADAS. NESTE CASO, TODOS OS CAMPOS DO GRUPO DEVEM SER DEFINIDOS ISOLADAMENTE, COM DIM (D1,D2) e IND (I1,I2), D1=DIMENSO DO PERIDICO(QUANTAS), D2=DIMENSO DO MLTIPLO(QUANTAS), I1=OCORRNCIAS DO PERIDICO(QUAIS) e I2=OCORRNCIAS DO MLTIPLO(QUAIS).

mltiplo contido em um grupo peridico declarado isoladamenteARQ(arq) NUM(num) QMAX(qmax) USO(ACESS) NOCNT CPO(data_utilizacoes,DT) DIM(5,20) IND(1-5,1-20) UNPK(6) 1 pessoal, ... 2 data_utilizacoes (5,20) PIC '9(06)', ...

- 17 -

12.

CNT| cp|,ca| | CNT( | | ) | gr|,ga| | | IND(i1) | | BFIX | < DFIX(tam) > | UNPK(tam) |

Atualmente, esta MACRO NO MAIS UTILIZADA, existindo para manter compatibilidade com verses anteriores das MACROS Em verses anteriores das MACROS ADABAS, era necessrio solicitar a gerao dos contadores de ocorrncias em campos mltiplos ou peridicos. Nome do campo no qual devolvido o nmero de ocorrncias de um campo mltiplo ou grupo peridico. Se IND usado cp deve ser o nome de um campo mltiplo pertencente a um grupo peridico e i1 o nmero da ocorrncia do grupo peridico.

13.

SUP (sp,|sa|)SUP Define um SUB ou SUPERDESCRITOR. sp o nome pelo qual o SUB ou SUPERDESCRITOR conhecido pelo programa e sa o nome pelo qual o SUB ou SUPERDESCRITOR conhecido pelo ADABAS. Se sa no informado, os dois primeiros caracteres so usados.

A declarao de SUB ou SUPERDESCRITOR deve ser a ltima dentro do arquivo e sp deve ser nico no programa. Os programas de aplicao no tem acesso direto aos campos definidos como SUB ou SUPERDESCRITOR, que so tratados exclusivamente pelo ADABAS.CPO(ageconta,AC) SUP(agencia,AG) CPO(age) FIM SUP(setor,SE) CPO(set) CPO(agen) FIM UNPK(10); UNPK(03) UNPK(03) UNPK(10) DESCRITOR SUBDESCRITOR SUPERDESCRITOR

Consideremos os dados acima codificados. Ao alterarmos ageconta, o ADABAS se encarregar de: * alterar a lista invertida para o DESCRITOR, * obter a parte do campo relativa ao SUBDESCRITOR, e alterar a lista invertida correspondente, * compor os campos relativos ao SUPERDESCRITOR, e alterar a lista invertida correspondente. Observe que o programa de aplicao apenas alterou o dado do registro. A utilidade da MACRO SUP proporcionar uma definio do SUB ou SUPERDESCRITOR, como rea de trabalho, que ser utilizada para comparaes, por exemplo, dentro da MACRO TODOS. Em funo disto, no h necessidade de se indicar o SMBOLO ADABAS nos campos (MACRO CPO) que o definem. Sua definio NO DEVE conter as MACROS PESQ, DIM e IND. Dos campos gerados pelas MACROS ADABAS, apenas estes podem ser utilizados pelos programas de aplicao, conforme as normas do REAL. Exemplo de uso de SUPERDESCRITORARQ(ARQX) NUM(99) QMAX(10) USO(ACESS) ... CPO(NOME) ALFA(40) SUP(AGEORG,AO) CPO(AGENCIA) UNPK(04) CPO(ORGAO) UNPK(03)

- 18 -

FIM SUP(AGEORGX,AO) CPO(AGENCIA) CPO(ORGAO) FIM FIM;

UNPK(04) UNPK(03)

As MACROS geram as seguintes ESTRUTURAS:1 ARQX, ... 2 AGEORG@D, 3 AGENCIA PIC '9999', 3 ORGAO PIC '999', 2 AGEORGX@D, 3 AGENCIA PIC '9999', 3 ORGAO PIC '999', 1 AGEORG@ DEF(AGEORG@D) CHAR(07), 1 AGEORGX@ DEF(AGEORGX@D) CHAR(07);

Exemplo de uso de SUBDESCRITORARQ(ARQX) NUM(99) QMAX(10) USO(ACESS) ... CPO(NOME) ALFA(40) SUP(MILHAR,ML) CPO(SALARIO) UNPK(05) FIM SUP(MILHARX,ML) CPO(SALARIO) UNPK(05) FIM FIM;

As MACROS geram as seguintes ESTRUTURAS:1 ARQX, ... 2 MILHAR@D, 3 SALARIO PIC '99999', 2 MILHARX@D, 3 SALARIO PIC '99999', 1 MILHAR@ DEF(MILHAR@D) CHAR(05), 1 MILHARX@ DEF(MILHARX@D) CHAR(05);

14.14.1.

Tratamento de ErrosErroERROinstrucao(arq) ABRIR OBTER PEGAR HISTOGRAMA POR PRIM PROX EXEC(proc) ; REPOR TIRAR TODOS

A execuo dessa MACRO faz com que a procedure declarada em EXEC receba o controle quando houver um response code diferente de zero na MACRO instruo do arquivo declarado em arq. Basicamente, DEVEM SER EVITADOS TRATAMENTOS DE ERRO, pois 1. A condio de erro acontece, em algumas MACROS, no meio dos procedimentos preparados pela expanso, implicando em problemas de lgica. - 19 -

2.

Na maioria dos casos, a adequao de parmetros internos ou externos ao programa podem resolver o problema.ERROABRIR EXEC(PROBLEMAS) ERROTODOS(CADAST) EXEC(PROBLEMAS)

A MACRO ERROABRIR no aceita o parmetro arq, pois a MACRO ABRIR global, no existindo abertura a nvel de FILE. Nota: Ateno com PL/I OPT(2) no tratamento de variveis dentro da procedure declarada em EXEC, caso estas variveis tiverem sido definidas na procedure que emitiu a MACRO.

14.2.

%@ROTER = myrot uma varivel do Preprocessador que pode ser usada para alterar o nome da rotina que ganha o controle em caso de erro no ADABAS.

15.15.1.

Macros ADABASABRIRABRIR |ETDATA (etvar)| ;

Essa MACRO gera um comando OPEN para todos os arquivos do Banco de Dados Default, declarados no programa. Se ETDATA (etvar) especificado, OBRIGATRIA a codificao do USERID (ver "USERID"). Na varivel etvar sero devolvidos os ltimos dados do usurio guardados por uma das MACROS: CHECKPOINT, ENDTRA ou FECHAR. Etvar deve ser uma varivel CHAR com no mximo 1800 bytes. Para programas de consulta on-line, ESTA MACRO NO DEVE SER UTILIZADA. Ver o MANUAL DE NORMAS E INFORMATIVOS TCNICOS editado pelo Suporte ao Desenvolvimento. 15.2. FECHARFECHAR | (etvar) | ;

Essa MACRO gera um comando CLOSE para todos os arquivos do Banco de Dados Default. Ela no pode ser emitida se existir Transao Aberta para o DB ALTERNATIVO. Se a varivel etvar especificada, seu contedo guardado pelo ADABAS e pode, posteriormente, ser obtido por uma MACRO ABRIR. ETvar deve ser uma varivel CHAR com no mximo 1800 bytes. Para programas de consulta on-line, ESTA MACRO NO DEVE SER UTILIZADA. Ver o MANUAL DE NORMAS E INFORMATIVOS TCNICOS editado pela Suporte ao Desenvolvimento. 15.3. TODOSTODOS (arq) | | | | COM (cond) | | | ATE (cond) < OU (cond) | E (cond) | | | |EXC (cond)| | > | | | | . . .

ORD (cp |,cp| |,cp| |,DEC|)

QTD (q)

EM (v);

Forma da condio| cp | | < | >=,=>, |

- 20 -

A MACRO gera um comando de pesquisa (Sx) para o arquivo especificado. Em q retorna a quantidade de registros que satisfazem a pesquisa e em v a lista dos ISNs desses registros. No realiza nenhuma acesso aos dados, apenas s listas invertidas. Usar esta MACRO quando se quer apenas verificar a existncia de um registro. Caso espere-se encontrar mais de 1000 registros como resultado de uma pesquisa, use as MACROS: PRIM e PROX (ver "PRIM"). EVITAR pesquisas que usem dois ou mais descritores. TODOS Especifica o arquivo que ser pesquisado.

As MACROS COM, ATE, EXC, OU e E so utilizadas para definir a pesquisa a ser realizada. TODOS(pessoal) COM(salario>10000) QTD(q) EM(v);

COM QTD EM

Especifica a primeira condio para pesquisa, que poder ser a nica. Na varivel especificada devolvida a quantidade de registros que satisfazem as condies dadas ou zero se nenhum registro for encontrado. Na varivel especificada devolvida a lista de ISNs dos registros que satisfazem as condies dadas. Esta varivel deve ser declarada como um ARRAY BIN FIXED(31) com a dimenso igual ao QMAX especificado para aquele arquivo. Declara-se apenas o nome da varivel, sem indicao da indexao, pois ser utilizada como pointer. Caso este ARRAY tenha sido definido com um tamanho inferior ao QMAX, por exemplo, QMAX=500, ARRAY=300, ocasionara em tempo de execuo um erro ADABAS (RSP=333 - rea de ISN's menor que QMAX).TODOS(pessoal) COM(salario=10000) ATE(salario=20000) QTD(q) EM(v);

ATE

Especifica um limite para a condio imediatamente anterior, orientando o ADABAS a trat-la como um intervalo fechado. Neste caso, o nico OPERADOR VALIDO IGUAL. O ADABAS acessar a lista invertida buscando o primeiro registro com salario >= 10000 e selecionar enquanto o salario for exp)| |ATE (cond)| | 'FIS' | ORD (| cp |) EM (isn); | sp | |

A MACRO PRIM permite trs opes de leitura: - 22 -

em sequncia lgica de um DESCRITOR

em sequncia lgica de um SUB ou SUPERDESCRITOR Em sequncia fsica. Estes parmetros so comuns a todas as opes: PR Especifica o arquivo que vai ser posicionado. IM EM Especifica a varivel onde o ISN do registro passado. As MACROS COM, E e ATE so utilizadas para definir a pesquisa a ser realizada. As condies declaradas nas MACROS COM devem ser baseadas no mesmo DESCRITOR ou SUB ou SUPERDESCRITOR declarado na MACRO ORD. As condies declaradas nas MACROS ATE devem ser baseadas no mesmo DESCRITOR declarado na MACRO ORD. 15.5. Leitura em Sequencia Lgica de um DescritorPRIM (arq) | COM (cp = exp) |E (ISN > exp)| |ATE (cp = exp)| | ORD (cp) EM (isn);

A MACRO PRIM pesquisa a lista invertida especificada pela MACRO ORD, localiza o ISN (nmero interno do ADABAS) do registro que atende s condies solicitadas na MACRO COM, e possibilita a leitura sequencial naquela ordem atravs das MACROS OBTER e PROX. Utiliza-se da leitura lgica (L3/L6) com posicionamento (VALUE START) seguida de leituras sequenciais (L3/L6). Se nenhuma condio declarada, isto , no h MACRO COM, o posicionamento feito no primeiro registro do descritor dado em ORD. Se a condio dada no for satisfeita retornado zero na varivel isn. Observe que as condies devem se utilizar do operador lgico IGUAL (=). NO PERMITIDO o uso de campos mltiplos ou pertencente a grupos peridicos nas condies. COM Especifica uma condio para pesquisa do ISN do registro a partir do qual ser iniciada a leitura. Caso no seja especificada a MACRO ATE, a condio definida para a MACRO COM ser assumida para final da pesquisa. Especifica o ISN do registro, dentre os que atendem condio, a partir do qual ser iniciada a leitura sequencial. utilizado em pesquisas que selecionam muitos registros com uma mesma condio, apresentando diversas telas e exigindo paginao (para frente e para trs, tipo BROWSE), como em um extrato. Sem esta MACRO, receberamos sempre o primeiro registro que atende a condio, e no o correspondente pgina desejada. Especifica uma condio para fim da pesquisa. vlida apenas para DESCRITORES. A MACRO solicita ao ADABAS o posicionamento com base na condio declarada na MACRO COM. Ele devolve o registro solicitado ou o imediatamente superior. A MACRO verifica se o registro recebido no ultrapassa a condio estabelecida em ATE. Especifica o DESCRITOR para controle da sequncia de pesquisa e leitura.PRIM (arq) | COM (sp >= exp) |E (ISN > exp)| | ORD (sp) EM (isn);

E

ATE

ORD 15.6.

Leitura em Sequncia Lgica de um Sub ou Superdescritor

Funciona de forma anloga leitura com base em um DESCRITOR. A principal diferena que a MACRO NO REALIZAR o controle de final de pesquisa (exceto por fim de arquivo), com as seguintes implicaes: 1. No pode ser declarada a MACRO ATE, portanto, a aplicao dever programar o controle de final de pesquisa. - 23 -

2. 3.

Poder receber logo no primeiro registro um valor superior ao argumento da pesquisa. A MACRO PROX correspondente tambm no poder ter a MACRO ATE.

Observe que as condies devem se utilizar do operador MAIOR OU IGUAL ( >= ). NO PERMITIDO o uso de campos mltiplos ou pertencente a grupos peridicos nas condies. Anlogo a opo anterior, exceto por no fazer o controle de fim. Anlogo a opo anterior. Especifica o SUB ou SUPERDESCRITOR para controle da sequncia de pesquisa e leitura. Leitura em Sequncia FsicaPRIM (arq) |E (ISN > exp)| ORD ('FIS') EM (isn);

COM E ORD

15.7.

A MACRO PRIM acessa diretamente o DATA STORAGE, sem consultar as listas invertidas, e possibilita a leitura sequencial em ordem fsica do arquivo atravs das MACROS OBTER e PROX. Trata-se de um acesso otimizado, prprio para processamento BATCH, muito til para a leitura de todos os registros de um arquivo, quando no for necessrio obedecer uma sequncia lgica. Utiliza-se da leitura fsica (L2/L5) seguida de leituras sequenciais (L2/L5). Se nenhum ISN declarado o posicionamento feito no primeiro registro do arquivo. Ao final do arquivo retornado zero na varivel isn. NO PERMITIDA a declarao de condies (MACROS COM e ATE). E ORD PRECAU O Especifica o ISN (exclusive) a partir do qual ser iniciada a leitura. utilizado para RESTART de programas. Caso no exista no BANCO de DADOS, o ADABAS provocar um ABEND. Especifica leitura fsica. Se houver atualizao (mesmo concorrente, por OUTRO PROGRAMA) para o arquivo em questo, existe o perigo de se ler duas ou mais vezes o mesmo registro.

Isto acontece em duas condies: 1. quando em leitura em ordem de DESCRITOR ou SUB ou SUPERDESCRITOR, ocorrer uma alterao do DESCRITOR, reposicionando o ISN do registro na lista invertida, na parte ainda no acessada. 2. quando em leitura fsica, se a atualizao do registro implicar em expanso fsica, tal que realoque o registro para outro bloco, a ser acessado. O processamento SEQUENCIAL de arquivos ADABAS pode gerar problemas de PERFORMANCE. Na necessidade da utilizao de tal recurso, procure expor o caso ao Suporte ao Desenvolvimento.

15.8.

OBTEROBTER (arq) DE (isn) ;

A MACRO l um registro. OBTER DE 15.9. PROXPROX (arq) | ATE (cond) | cond < cp = exp >

Especifica o arquivo a ser lido. Especifica o ISN do registro que ser lido.

EM (isn) ;

A MACRO posiciona o prximo registro a ser lido por uma MACRO OBTER. - 24 -

Se a condio especificada no for satisfeita, a varivel especificada no parmetro EM ser zerada. Se no for dada nenhuma condio o arquivo ser posicionado at o fim e s ento a varivel isn ser zerada. PROX ATE EM 15.10. PORPOR (arq) | EM (isn); | < > | DE (isn); |

Especifica o arquivo a ser posicionado. Especifica a condio de trmino do posicionamento. No pode ser usada para SUB ou SUPERDESCRITOR. Especifica a varivel onde o ISN do registro passado.

A MACRO grava um novo registro no arquivo especificado. POR EM DE 15.11. REPORREPOR (arq) DE (isn) ;

Especifica o arquivo que vai ser gravado. Especifica a varivel onde vai ser devolvido o ISN do registro gravado. Especifica a varivel que contm o ISN do registro a ser gravado.

A MACRO atualiza um registro do arquivo especificado. REPOR DE 15.12. TIRARTIRAR (arq) DE (isn) ;

Especifica o arquivo a ser atualizado. Especifica o ISN do registro a ser atualizado.

A MACRO elimina um registro do arquivo especificado. TIRAR DE 15.13. RELCIDDRELCID |(arq)|;

Especifica o arquivo do qual o registro vai ser eliminado. Especifica a varivel que vai conter o ISN do registro a ser eliminado.

A MACRO libera espao na rea interna do ADABAS: 1. Libera listas de ISN presas. 2. Encerra leituras sequencias. Deve ser usada no final de pgms que no executam a MACRO FECHAR. Se arq especificado, somente as reas associadas ao arquivo em questo sero liberadas. Em caso de pgms que tratam o response code 309 o uso de arq opcional. 15.14. ENDTRAENDTRA |(etvar)|;

A MACRO termina uma transao lgica. obrigatrio o seu uso quando os arquivos atualizados forem declarados com USO(ALTER). Se a varivel etvar usada, seu contedo guardado pelo ADABAS. Etvar deve ser uma varivel CHAR com no mximo 1800 bytes, e s pode ser utilizada para o DB DEFAULT. 15.15. BACTRABACTRA |(arq)|;

A MACRO desfaz a transao lgica iniciada aps a ltima execuo de uma MACRO ENDTRA. - 25 -

Se arq for especificado e existir Transao Aberta para um Banco de Dados, o arquivo dever pertencer a esse Banco de Dados. 15.16. CHECKPOINT| etvar | CHECKPOINT ( < > ); |'literal'|

Guarda os dados contidos na varivel etvar ou o literal para posterior uso da MACRO ABRIR. obrigatrio o uso de USERID. Etvar deve ser uma varivel CHAR com no mximo 1800 bytes. Esta MACRO possue diversas opes, que permitem a alterao dinmica de algumas declaraes. 15.17. PARA| | ACESS | | PARA (arq) | USO ( < > ) | ; | | ALTER | |

Permite o acesso a um arquivo, controlando quais registros devem ser colocados em HOLD. Muito til quando se pretende realizar uma quantidade significativa de pesquisas ou leituras que implicaro em poucas atualizaes. Deve ser utilizada da seguinte forma: 1. declarar o arquivo com USO(ALTER). 2. logo em seguida, declarar PARA(arq) USO(ACCES), fazendo com que as pesquisas e leituras NO HOLDEM os ISNs. 3. ao localizar um registro a ser atualizado: a. b. c. d. declarar PARA(arq) USO(ALTER), acessar o registro, portanto colocando-o em HOLD, atualizar o registro, declarar PARA(arq) USO(ACCES).

Observe que se o arquivo foi declarado como USO(ACCES), no ser vlido o uso de PARA(arq) USO(ALTER).| PEGAR (isn) | PARA (arq) | | ; | SOLTAR (isn) |

PEGAR SOLTAR NOTE BEM

O ISN do arquivo especificado ser colocado em HOLD. O ISN do arquivo especificado ser liberado do HOLD. O tempo de transao (TRANSACTION TIME = TT) comea a ser computado pelo ADABAS a partir do momento em que a transao lgica tiver HOLDADO o seu primeiro registro.

O fato de se usar esta opo da MACRO PARA, NO ir posicionar o TT para ZERO. O TT ser posicionado para zero na execuo de uma das seguintes MACROS: FECHAR, BACTRA ou ENDTRA. Ver "Mecnica de Hold Atravs das Macros".PARA (arq) QMAX (qmax) ;

Altera dinamicamente a quantidade mxima de registros. 15.18. HISTOGRAMAHISTOGRAMA (arq) | | | COM (cond1) | | | ATE (cond2) | QTD (q)

- 26 -

| VALOR_EM (v1 |,v2|); | cpo >= exp | cond1 < > | sp >= exp | cond2 | cpo = exp |

|

|

|

cpo deve estar declarado como PESQ cpo deve ser o mesmo do cond1 e cond2

A MACRO HISTOGRAMA gera um comando de leitura de Listas Invertidas para o arquivo e o descritor especificados. Em v1 retorna um valor encontrado para o descritor e em "q" a quantidade de registros onde o descritor assume esse valor. Se o descritor se encontrar em um grupo peridico, a macro retorna em v2 o nmero da ocorrncia. HISTOGRAMA Especifica o arquivo cujas Listas Invertidas sero lidas. COM ATE QTD VALOR_EM Especifica qual descritor a ser lido e um valor a partir do qual ser iniciada a leitura. Especifica um valor para indicar o fim da leitura. Especifica uma varivel onde ser devolvida a quantidade de registros onde o descritor assume um valor. Especifica uma varivel onde ser devolvido o valor lido para o descritor e, eventualmente uma segunda varivel onde ser devolvido o nmero da ocorrncia de um grupo peridico onde se encontra esse valor, caso o descritor pertena ao grupo peridico.EXEC (proc);

15.19.

ERROHISTOGRAMAERROHISTOGRAMA (arq)

A procedure declarada em EXEC receber o controle quando houver um "response code" diferente de zero na macro HISTOGRAMA para o arquivo declarado em arq. Observaes 1. A macro HISTOGRAMA dever utilizar uma macro ARQ definida s para seu prprio uso. 2. As variveis da macro VALOR_EM devem ser declaradas como segue: * 3. 4. 5. sempre com formato compatvel com o formato declarado para o descritor na macro ARQ. * sempre numrica com tamanho de pelo menos 2 dgitos. A primeira emisso da macro HISTOGRAMA com determinado descritor deve conter obrigatoriamente a macro COM pois nela que consta a referncia ao descritor. Se esta condio no for obedecida, o programa receber um "response code" 60 do ADABAS. Ao trmino da leitura, a macro HISTOGRAMA retorna 0 na varivel "q" usada na macro QTD. Conceito - Listas Invertidas.

LISTAS INVERTIDAS Tabelas mantidas pelo ADABAS que associam cada valor de cada descritor de cada arquivo lista de ISN's dos registros onde o descritor assume o valor referenciado. 15.20. Exemplo de Uso de Histograma Exemplo de utilizao da macro HISTOGRAMA, desejamos todos os carros da marca "FORD" e que tenham as cores compreendidas entre os valores "BACK" e "WHITE".1 2 3 ADHISTO: PROC OPTIONS(MAIN); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'ADHISTO';

- 27 -

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

ARQ(AUTOMOBILES) NUM(95) QMAX(100) USO(ACESS) CPO(MAKE,AA) ALFA(20) PESQ CPO(COLOR,CA) ALFA(10) PESQ CPO(YEAR,DA) UNPK(02) FIM; ARQ(AUTOMOBILES2) NUM(95) QMAX(100) USO(ACESS) CPO(COLOR,CA) ALFA(10) PESQ FIM; DCL /*** DESCR1 VARIAVEL ONDE J QT1 QT2 QUANTIDADE DE ISNA(100) CHAR(10), FICARA' O VALOR DO DESCRITOR COLOR ***/ BIN FIXED(31), BIN FIXED(31), BIN FIXED(31), VEZES QUE OCORRE O VALOR EM DESCR1 ***/ BIN FIXED(31);

/***

ABRIR; HISTOGRAMA (AUTOMOBILES2) COM (COLORH >= 'BLACK') ATE (COLORH = 'WHITE') QTD (QT2) VALOR_EM (DESCR1); DO WHILE (QT2 = 0); TODOS (AUTOMOBILES) COM (COLOR = DESCR1) E (MAKE = 'FORD') QTD (QT1) EM (ISNA); DO J = 1 TO QT1; OBTER(AUTOMOBILES) DE(ISNA(J)); PUT DATA (MAKE, COLOR, YEAR); END; HISTOGRAMA (AUTOMOBILES2) COM (COLORH >= 'WHITE') QTD (QT2) VALOR_EM (DESCR1); END; FECHAR; END ADHISTO;

15.21.

NOMEPGMNOMEPGM (PGM);

A MACRO identifica o nome do programa que est emitindo comandos ADABAS, evitando assim problemas de "direcionamento" por parte do "DBNCF" Deve ser usada em: 1. Rotinas de uso geral em PL/1, (que utilizam ADABAS), pertencentes a um sistema e que so utilizadas por programas de outros sistemas 2. Programas PL/1 chamados por programas NATURAL

15.22.

Response Codes Emitidos pela Macro NOMEPGM Response codes emitidos por erro de codificao da macro RSP 041 - "AN ERROR WAS DETECTED IN THE FORMAT BUFFER" 1. Verifique o campo ADDITIONS_2 do CONTROL BLOCK. Ele poder conter um dos cdigos a seguir: M1 M2 M3 RECORD BUFFER com comprimento menor que 8(oito) O campo "DT" (DATA) no o primeiro campo do FORMAT BUFFER DATA INVALIDA - A data deve ser do tipo (AAMMDD) onde AA = ANO (deve ser maior ou igual a 88). NOT caso o campo ADDITIONS_2 no contenha um dos cdigos acima verifique cada A tem da lista de itens que podem provocar o "RESPONSE CODE 041". RSP 113 - "THE SPECIFIED ISN WAS INVALID" Esse response pode ocorrer quando um programa de um sistema tentar alterar/excluir um registro de movimentos de outro sistema. - 28 -

2.

3.

RSP 201 - "THE PASSWORD SPECIFIED WAS NOT FOUND" So duas as situaes em que pode ocorrer o response 201: 1 2 Programas de um sistema que incluem registros de movimentos de outro sistema. Incluso de movimentos no cadastrados.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 KBPGM: PROC OPTIONS(MAIN); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'KBPGM'; NOMEPGM (KBPGM); ARQ(DBMOVIMENTOS) NUM(34) QMAX(1) USO(ACESS) CPO(DATA_MOV,DT) DFIX(07) CPO(NOME_MOV,NO) ALFA(04) CPO(XAV_ALFA,XA) ALFA(20) CPO(XAV_NUMER,XN) UNPK(15) CPO(DADOS,DA) DIM(3) IND(1-3) ALFA(100) SUP(XAVE_ALFA,S1) CPO(NOME,NO) ALFA(04) CPO(ALFA,XA) ALFA(20) FIM; SUP(XAVE_NUM,S2) CPO(NOME2,NO) ALFA(04) CPO(NUMER,XN) UNPK(15) FIM; FIM; ARQ(KBARQUIVO) NUM(170) QMAX(1) USO(ACESS) CPO(KBCPO,CA) ALFA(10) PESQ CPO(KBCPO,CA) ALFA(10) PESQ FIM; . . END KBPGM;

15.23.

Exemplo de Uso de NOMEPGM

15.24.

Mecnica de HOLD Atravs das MACROS O ADABAS permite que dois ou mais usurios atualizem um mesmo arquivo simultaneamente. Para garantir que esses usurios no atualizem um mesmo registro simultaneamente, o ADABAS coloca esse registro "HOLD" quando o primeiro usurio o obtm. Assim, quando o segundo usurio tentar obt-lo ficar esperando at que o primeiro usurio o libere. Para que um registro fique "HOLD", usando as MACROS, deve-se observar o seguinte: 1. O arquivo a que pertence o registro deve estar declarado com USO(ALTER); 2. USO(ALTER) deve estar em efeito no momento da execuo das MACROS. As MACROS que colocam um registro "HOLD" so as seguintes: 1. TODOS - O primeiro registro da lista de ISN'S encontrados, no caso, de lista vazia tambm ser contabilizado para efeito de registros na "HOLD QUEUE" 2. PRIM/PROX - O registro cujo ISN foi encontrado, ou no caso de ISN ZERO, o registro que foi usado para teste nas condies das MACROS COM ou ATE; 3. OBTER - O registro cujo ISN est sendo especificado, desde que o ISN no seja resultante das MACROS PRIM/PROX. 4. POR - O registro cujo ISN especificado, no caso de o usurio estar especificando o ISN, ou o registro cujo ISN devolvido pelo ADABAS; 5. TIRAR - O registro cujo ISN especificado; 6. PEGAR - O registro cujo ISN especificado; As MACROS que liberam os registros "HOLD" so as seguintes: 1. SOLTAR - O registro cujo ISN especificado; 2. ENDTRA / BACTRA / FECHAR - Todos os registros "HOLDADOS" pelo programa. - 29 -

Para programas que atualizam on-line, evitar mandar telas para serem preenchidas no meio de uma transao lgica. NO HOLDAR mais de 100 registros em uma transao.

Processamentos Especiais16.1. Lista de ISNS em que QTD > QMAX (RSP309) Exemplo de tratamento de RESPONSE CODE 309 onde QTD > QMAX. Ser tratada toda a lista de ISNs obtida pela pesquisa efetuada pela MACRO TODOS.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ADTODOS: PROC OPTIONS(MAIN,REENTRANT); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'ADTODOS'; ARQ(TESTE) NUM(100) QMAX(10) USO(ACESS) CPO(CODIGO,CF) DFIX(7) PESQ CPO(NOME,NO) ALFA(30) CPO(CIDADE,CI) ALFA(20) FIM; DCL ISNV (10) BIN FIXED(31), SALVA BIN FIXED(31) INIT (0), QTDE BIN FIXED(31); ABRIR; ERROTODOS(TESTE) EXEC(RSP309); COMECO: TODOS(TESTE) COM(CODIGO > 1000) QTD(QTDE) EM(ISNV); IF QTDE > 10 THEN DO; SALVA = QTDE; QTDE = 10; END; DO I = 1 TO QTDE; OBTER(TESTE) DE(ISNV(I)); PUT DATA (CODIGO, NOME, CIDADE); END; IF SALVA > 10 THEN DO; SALVA = SALVA - 10; GO TO COMECO; END; RSP309: PROC; IF @RSP = 309 THEN CALL @ROTER; END RSP309; FECHAR; END ADTODOS;

10 13 16-19 16.2.

IMPORTANTE inicializar o campo salva. Declarao da rotina destinada a tratar o RESPONSE CODE 309. Rotina para tratar toda a lista de ISN's, em conjuntos de dez ISN's, a cada vez.

Uso de RELCID para Listas de ISNS onde QTD > QMAX Neste caso quero tratar apenas parte da lista de ISNS resultante da pesquisa.1 2 3 4 5 6 7 8 9 ADBPLI: PROC OPTIONS(MAIN); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'ADBPLI'; ARQ(PERSONNEL) NUM(94) QMAX(10) USO(ACESS) CPO(NAME,BA) ALFA(20) PESQ CPO(FIRST_NAME,BB) ALFA(15) FIM; ERROTODOS(PERSONNEL) EXEC(RSP309); DCL I BIN FIXED(31),

- 30 -

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

ISNV (10) BIN FIXED(31), QTDE BIN FIXED(31) ; ABRIR; TODOS(PERSONNEL) COM (NAME = 'CHAAAAAAAAAAAAAAAAAA') ATE (NAME = 'CL999999999999999999') QTD(QTDE) EM(ISNV); DO I = 1 TO QTDE; OBTER(PERSONNEL) DE(ISNV(I)); PUT SKIP DATA (NAME,FIRST_NAME); END; RSP309: PROC; IF @RSP = 309 THEN CALL @ROTER; PUT SKIP LIST ('INTERCEPTEI O RSP 309, QTDE=',QTDE); RELCID(PERSONNEL); QTDE = 10; END RSP309; FECHAR; END ADBPLI;

LINHAS 8 20-25 23 16.3.

EXPLANAO Declarao da rotina destinada a tratar o RESPONSE CODE 309. Rotina que trata apenas os dez primeiros ISN's da lista, liberando os demais ISN's. comando para liberao dos resultados e recursos envolvidos na pesquisa efetuada.

RESTART Usando ET-VAR Este um caso simples de RESTART, que atende a situaes com 'n' arquivos de entrada com dados para atualizao do DATA BASE, mas que no gravem arquivos sequenciais de sada. Para casos mais elaborados, deve ser utilizada a rotina ADRESTAR (ver DOCUMENTAO ESPECFICA).1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ADENTRA: PROC OPTIONS (MAIN); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'ADENTRA'; USERID ('ADENTRA'); ARQ(ARQ1) NUM(10) QMAX(1) USO(ALTER) CPO(CHAV) ALFA(10) PESQ CPO(NOME) ALFA(20) FIM; DCL MOV FILE RECORD INPUT ENV(F RECSIZE(30)), 1 REGMOV, 2 CHAVMOV CHAR(10), 2 NOMEMOV CHAR(20), 1 LIDOS FIXED(09) INIT(0); 1 ISN,QT BIN FIXED(31); DCL 1 ET_AREA, 2 TERMINO CHAR(10) INIT('FIM NORMAL'), 2 QUANTPOR FIXED(07) INIT(0), 2 QUANTREPOR FIXED(07) INIT(0), 2 CONTADOR FIXED(09) INIT(0), 2 CHAVATU CHAR(10) INIT (' '), 1 ET_AREAD CHAR(33) DEF AREA; OPEN FILE(MOV); ABRIR ETDATA(ET_AREAD); IF TERMINO = 'ABENDOU' THEN DO; ON ENDFILE(MOV) GOTO ERRO; READ FILE(MOV) IGNORE(CONTADOR - 1) READ FILE(MOV) INTO(REGMOV); IF CHAVMOV = CHAVATU THEN DO; ERRO: DISPLAY ('FITA MOV ERRADA');

- 31 -

31 33 34 35 36

CALL ABEND; END; END; TERMINO = 'ABENDOU'; ON ENDFILE(MOV) GOTO TERMINA;

LINHAS 4 5 15-21 17-19 23 25-34

3537 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

EXPLANAO Identificao do Usurio Observe que o ARQUIVO foi definido como ALTER. Definio da ET-VAR com os dados para o restart. Definio de acumuladores de registros lidos um para cada arquivo. MACRO para abrir o BANCO de DADOS e ler a ET-VAR. Rotina para tratar o restart. 2 identifica se o programa inicia aps um ABEND. 5 2 o arquivo lido no pode acabar antes do ponto guardado na ET-VAR. 6 2 l o arquivo ignorando os registros processados anteriormente. 7 2 verifica se o posicionamento foi efetuado corretamente. 9 marca um campo dentro da ET-VAR indicando que ocorreu algum processamento

LOOP: READ FILE(MOV) INTO(REGMOV); LIDOS = LIDOS + 1; TODOS(ARQ1) COM(CHAV = CHAVMOV) QTD(QT) EM(ISN); IF QT = 0 THEN DO; CHAV = CHAVMOV; NOME = NOMEMOV; POR(ARQ1) EM(ISN); QUANTPOR = QUANTPOR + 1; END; ELSE DO; OBTER(ARQ1) DE(ISN); NOME = NOMEMOV; REPOR(ARQ1) DE(ISN); QUANTREPOR = QUANTREPOR + 1; END; IF LIDOS > 99 THEN DO; CONTADOR = CONTADOR + LIDOS; LIDOS = 0; CHAVATU = CHAVMOV; ENDTRA(ET_AREAD); END; GOTO LOOP;

53-5860 61 62 63 64 65 66 67

A cada cem atualizaes emite um ENDTRA, para efetivar as atualizaes e limpar a HOLD QUEUE.TERMINA: CLOSE FILE(MOV); PUT SKIP DATA(QUANTPOR,QUANTREPOR); TERMINO = 'FIM NORMAL'; CONTADOR = 0; CHAVATU = ' '; FECHAR(ET_AREAD); END ADENTRA;

- 32 -

63-67 64-65 66

Prepara a ET-VAR indicando um fim normal. Zera variveis e chaves. Finaliza o BANCO de DADOS e grava a ET-VAR.

Documentar na pasta de produo do Sistema, que em caso de Abend deste programa, o mesmo dever ser reexecutado pois trata-se de programa restartvel. 16.4. PRIM com "E" para CICS com RETURN TRANSID1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 DBPGADZ: PROC(P) OPTIONS(MAIN,REENTRANT); %INCLUDE MAC01(ADABAS); @PROGRAMA = 'DBPGADZ'; ARQ (AUTO) NUM (95) USO (ACESS) CPO (MAKE,AA) ALFA (20) CPO (MODEL,AB) ALFA (20) CPO (COLOR,CA) ALFA (10) FIM; DCL DCL DCL ISN_LIDO P 1 COMABASE 2 ISN_X 2 VLR_PESQ_CO BIN FIXED(31); POINTER; BASED(P), BIN FIXED(31), CHAR(20);

PESQ

DCL DCL

AREA_SAI CHAR(50); 1 AREA_SAI1 BASED(ADDR(AREA_SAI)), 2 MAK CHAR(20), 2 MOD CHAR(20), 2 COL CHAR(10); 1 AREA, 2 ISNPRIM 2 VLRPESQ BIN FIXED(31) INIT(0), CHAR(20) INIT('CITROEN');

DCL

IF EIBCALEN = 0 THEN DO; P= ADDR(AREA); END; PRIM (AUTO) COM (MAKE = VLR_PESQ_CO) E (ISN > ISN_X) ATE (MAKE = 'CITROENX') ORD (MAKE) EM (ISN_LIDO);

27-2833 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Na primeira vez, EIBCALEN zero.IF ISN_LIDO = 0 THEN DO; OBTER (AUTO) DE (ISN_LIDO); MAK = MAKE; MOD = MODEL; COL = COLOR; EXEC CICS SEND FROM ISN_X = ISN_LIDO; VLR_PESQ_CO = MAKE; (AREA_SAI) LENGTH(50) ERASE;

EXEC CICS RETURN TRANSID('ADZA') COMMAREA(COMABASE) LENGTH(24); END; EXEC CICS RETURN ; END DBPGADZ;

- 33 -

41-42 48

Posicionando o prximo ISN e o novo valor para a condio de pesquisa especificada na MACRO PRIM., passados atravs da COMMAREA. Retorna para iniciar no mesmo terminal a transao ADZA.

- 34 -