|
Quando trabalhamos com o CICS, pode haver a necessidade de acessarmos um banco de dados hierarquico usando o DL/I.
O CICS prove a facilidade de acessarmos o DL/I, utilizando todos os conceitos aprendidos com o uso do DL/I.
O PSB que irá ser acessado deverá estar definido em uma tabela propria denominada 'DLZACT'.
Em um programa CICS usando DL/I tambem é necessário a checagem do STATUS apos cada comando de acesso ao banco de dados.
O compilador inclui um item de grupo denominado 'DLZDIB' onde contem o campo 'DIBSTAT' que é o local onde o CICS coloca o status retornado após cada
execucao de comando DL/I.
Após cada comando de acesso DL/I deve-se checar o status retornado através do campo 'DIBSTAT'.
Os codigos retornados no 'DIBSTAT' são os códigos padrões do DL/I.
Comando SCHEDULE
Formato do comando:
| EXEC DLI SCHEDULE |
Explicação do argumento |
| PSB ('NOME PSB') |
Especifica-se o nome do PSB que deseja-se tornar disponível para o acesso do programa em CICS. |
Este comando é utilizado para 'assinalar' um PSB para acesso do programa em CICS.
Este comando será utilizado somente quando houver necessidade de acesso a um banco de dados.
Exemplo do comando:
EXEC DLI
SCHEDULE PSB ('PS06001')
END-EXEC.
|
Explicação do exemplo:
O CICS, através do DL/I tornar disponível o PSB especificado para o acesso do programa.
Condicao de excecao:
As condições de exceção deste comando são tratadas pelo programa 'ABENDLI'. portanto deve-se codificar o comando 'HANDLE ABEND' especificando o programa
'ABENDLI'.
Comando TERMINATE
Formato do comando:
| EXEC DLI TERMINATE |
Não possui argumentos |
Este comando é utilizado para terminar o acesso ao DL/I pelo programa em CICS.
Este comando será utilizado sempre que não mais houver necessidade de acesso ao banco de dados.
Exemplo do comando:
EXEC DLI
TERMINATE
END-EXEC.
|
Explicação do exemplo:
O CICS, através do DL/I terminará o acesso ao banco de dados atraves do PSB 'SCHEDULADO' anteriormente.
Condição de exceção:
As condições de exceção deste comando são tratadas pelo programa 'ABENDLI'.
Portanto deve-se codificar o comando 'HANDLE ABEND' especificando o programa 'ABENDLI'.
Comando SYNCPOINT
Formato do comando:
| EXEC CICS SYNCPOINT |
Explicação do argumento |
| ROLLBACK |
Especifica-se que as alterações efetuadas devem ser ignoradas. |
Este comando é utilizado para ignorar as atualizações efetuadas no banco de dados durante a execução da tarefa.
Este comando será utilizado sempre que ocorrer algum problema na atualização do banco de dados.
A execução do comando sem a opção 'ROLLBACK' efetiva as atualizações até então efetuadas pela tarefa.
Exemplo do comando:
EXEC CICS
SYNCPOINT ROLLBACK
END-EXEC.
|
Explicação do exemplo:
O CICS irá ignorar todas as atualizações efetuadas no banco de dados pelo programa de aplicação.
Após a execução deste comando, o banco de dados ficará com os dados inalterados.
Condição de exceção:
As condições de exceção deste comando são tratadas pelo programa 'ABENDLI'.
Portanto deve-se codificar o comando 'HANDLE ABEND' especificando o programa 'ABENDLI'.
Comandos de acesso e atualização do banco de dados.
Os comandos de acesso ao banco de dados seguem ao formato abaixo:
EXEC DLI
CODIGO USING PCB (NR PCB)
WHERE (CONDICAO)
FIELDLENGTH (TAMANHO)
SEGMENT (NOME SGTO)
FROM/INTO (AREA DADOS)
SEGLENGTH (TAMANHO)
END-EXEC.
|
Onde:
- CODIGO: É o codigo de funcao que deseja-se executar que pode ser GU, GN, GNP, REPL, ISRT e DLET.
- PCB: especifica-se o numero do PCB no PSB correspondente. Varia de 1 a quantidade de PCB'S no PSB.
- WHERE: Especifica-se o campo chave do segmento e a condicao de comparacao. equivale a usar um SSA qualificado.
- FIELDLENGTH: Especifica-se o tamanho do campo chave
- SEGMENT: Especifica-se o nome do segmento que deseja acessar.
- FROM: Especifica-se a area de dados de onde o dl/i pegará os dados, se estiver alterando o banco de dados.
- INTO: Especifica-se a area de dados onde o segmento acessado será armazenado, se estiver lendo o banco de dados.
- SEGLENGTH: Especifica-se o tamanho da area especificada na opção 'SEGMENT'.
- END-EXEC: Delimitador para comandos para programas COBOL. Indica o final de um comando CICS.
Exemplo para programa COBOL de um comando com SSA qualificado:
EXEC DLI
GU USING PCB (1)
SEGMENT (SG0801)
WHERE (FL080101 = WORK-CARGO-DB08)
FIELDLENGTH (7)
INTO (SG0801)
SEGLENGTH (+100)
END-EXEC.
|
Explicação do exemplo:
- O CICS, atraves do DL/I, recuperará o SG0801 que satisfaça a condição especificada no parametro 'WHERE'.
- O tamanho do campo chave do segmento é 7 bytes e o tamanho do segmento é 100 bytes.
- Os dados do segmento após o acesso serão colocados na área de dados SG0801.
- Foi utlizado o primeiro PCB do PSB especificado na tabela "DLZACT" para acesso deste programa.
Exemplo para programa COBOL de um comando coM SSA nao qualificado:
EXEC DLI
GNP USING PCB (5)
SEGMENT (SG0602)
INTO (SG0602)
SEGLENGTH (+162)
END-EXEC.
|
Explicação do exemplo:
O CICS, através do DL/I, recuperará o próximo SG0602 que esteja subordinado a um pai especifico estabelecido através de um 'GU' ou 'GN'.
O tamanho do segmento é 162 bytes. Os dados do segmento após o acesso serão colocados na área de dados SG0602.
Foi utilizado o quinto PCB do PSB especificado na tabela "DLZACT" para acesso deste programa.
Observação:
Lembrar que apos cada comando de acesso ao banco de dados deve ser checado o campo 'DIBSTAT' tomando as providências necessárias para cada caso.
|