CICS - Usando o DL/I com o CICS


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

CICS - Usando o DL/I com o CICS

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.