Menu principal                 [Fechar]


CICS - Tratamento de arquivos VSAM


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF.

CICS - Tratamento de arquivos VSAM

Para o manuseio dos arquivos no CICS, existe um modulo chamado FILE CONTROL PROGRAM ( FCP ), sendo que ele controla todos os acessos aos arquivos.

O 'FCP' possui a FILE CONTROL TABLE ( FCT ) que é o local onde estão contidas todas as informações referentes as funções de serviço (READ, WRITE, REWRITE, DELETE, ETC), previstas para um determinado arquivo e contém também todas as informações descritivas referente ao arquivo, portanto não há a necessidade de definição do arquivo pelo programa de aplicação.

O 'FCP' possui as seguintes funções:

  • abrir e fechar arquivos
  • controle exclusivo
  • recuperação de arquivos
  • ler para simples consulta
  • ler para posterior atualização
  • atualização
  • deletar registros
  • adicionar registros
  • liberar o controle exclusivo
  • acessar o arquivo sequencialmente
No manuseio de um arquivo pelo programa de aplicação, ocorrendo um erro por estar efetuando algo que o VSAM não suporta, ocorrerá a condição de exceção 'ILLOGIC'.

Comando READ

Formato do comando:


EXEC CICS READ Explicação do argumento
DATASET ('nome arquivo') Especifica-se o nome do arquivo a acessar.
INTO (WORK-AREA) Especifica-se a área onde deverá ser colocadoo registro lido.
RIDFLD (WORK-CHAVE) Especifica-se a chave do registro a ser lido.
LENGTH (+100) Especifica-se o tamanho do registro a ser lido. opcional se for registro fixo.
UPDATE Informa que o registro a ser lido sofrerá posterior atualização.
GENERIC Indica que a chave informada é parcial, ou seja, não está sendo informada toda a chave.
KEYLENGTH (+10) Especifica-se o tamanho da chave genérica. Este argumento é usado em conjunto com a opção 'GENERIC' e só pode ser usada para arquivos KSDS.
GTEQ O CICS tentará ler um registro com chave maior ou igual a chave informada.
EQUAL O CICS tentará ler um registro com chave igual a chave informada ( DEFAULT ).
RBA Para arquivos ESDS, indica que a area especificada em 'RIDFLD' contem um RBA e nao a chave do registro. Neste caso, a area especificada em 'RIDFLD' deve estar definida PIC S9(008) COMP.

Este comando é utilizado para uma leitura randômica em um arquivo

Exemplo do comando:



          EXEC     CICS  READ    DATASET ('D02TAB')
                                 INTO    (WORK-TAB)
                                 RIDFLD  (WORK-CHAVE)
                                 LENGTH  (+130)
          END-EXEC.
      

Explicacao do exemplo:

O CICS tentará ler um registro no arquivo 'D02TAB' com chave igual ao conteudo de 'WORK-CHAVE', o registro será colocado em 'WORK-TAB' e seu tamanho é de 130 bytes.

Condição de exceção:

  • DSIDERR: o arquivo informado não consta na 'FCT'.
  • NOTOPEN: o arquivo informado está fechado.
  • NOTFND: o registro requisitado não existe.
  • DUPKEY: o arquivo informado é um índice alternado e existe mais de um registro com a mesma chave alternada
  • INVREQ: não existe, na 'FCT', previsão para a utilização deste recurso
  • OUTROS: ILLOGIC, IOERR, LENGERR.
Comando WRITE

Formato do comando:


EXEC CICS WRITE Explicação do argumento
DATASET ('NOME ARQUIVO') Especifica-se o nome do arquivo que se deseja acessar.
FROM (WORK-AREA) Especifica-se a área onde se encontra o registro a ser gravado.
RIDFLD (WORK-CHAVE) Especifica-se a chave do registro a ser gravado. Deve ser igual a chave da área de dados indicada na opção 'FROM'.
LENGTH (+100) Especifica-se o tamanho do registro a ser gravado. Opcional se for registro fixo.
RBA Para arquivos ESDS, indica que a área especificada em 'RIDFLD' contem um RBA e não a chave do registro. Neste caso, a área especificada em 'RIDFLD' deve estar definida PIC S9(008) COMP.
MASSINSERT Inserção em massa de registros. As chaves devem ser ascendentes. Esta operação deve ser terminada por um 'UNLOCK' para um posterior acesso ao arquivo.

Este comando é utilizado para fazer adição de registros em um arquivo

A opção 'MASSINSERT' permite a inclusão sequencial de registros no VSAM, sendo que a partir da inclusão do primeiro registro, o CICS determinará o controle exclusivo para o programa, que deverá ser liberado quando não houver mais registros a incluir, através do comando 'UNLOCK'

Exemplo do comando:



          EXEC     CICS WRITE    DATASET ('D02TAB')
                                 FROM    (WORK-TAB)
                                 RIDFLD  (WORK-CHAVE)
                                 LENGTH  (+130)
          END-EXEC.
      

Explicacao do exemplo:

O CICS tentará incluir um registro no arquivo 'D02TAB' com chave igual ao conteúdo de 'WORK-CHAVE', O registro será retirado de 'WORK-TAB' e seu tamanho é de 130 bytes.

Condição de exceção:

  • DUPREC: o registro informado já existe no arquivo
  • NOSPACE: não existe mais espaço no arquivo para a adição de registros.
  • INVREQ:
    • não existe, na 'FCT', previsão para a utilização deste recurso
    • o arquivo está definido na 'FCT' como ESDS e
    • o comando não possui a opção RBA
    • o arquivo está definido na 'FCT' como KSDS e
    • o comando possui a opção RBA
  • Outros: DSIDERR, ILLOGIC, IOERR, LENGERR, NOTOPEN.
Comando REWRITE

Formato do comando:


EXEC CICS REWRITE Explicação do argumento
DATASET ('NOME ARQUIVO') Especifica-se o nome do arquivo que se deseja acessar.
FROM (WORK-AREA) Especifica-se a área onde se encontra o registro a ser gravado.
LENGTH (+100) Especifica-se o tamanho do registro a ser gravado. Opcional se for registro fixo.

Este comando é utilizado para regravar um registro em um arquivo. o registro deve ter sido anteriormente recuperado através do comando 'READ' com a opção 'UPDATE'. Após a leitura, seu campo chave não poderá ser alterado.

Exemplo do comando:



          EXEC     CICS  REWRITE  DATASET ('D02TAB')
                                  FROM    (WORK-TAB)
                                  RIDFLD  (WORK-CHAVE)
                                  LENGTH  (+130)
          END-EXEC.
      

Explicação do exemplo:

O CICS tentará regravar um registro no arquivo 'D02TAB' com chave igual ao conteúdo de 'WORK-CHAVE', o registro será' retirado de 'WORK-TAB' e seu tamanho é de 130 bytes.

Condição de exceção:

  • INVREQ:
    • Não existe, na 'FCT', previsão para a utilização deste recurso.
    • O registro a ser regravado não foi recuperado através do comando 'READ' com a opção 'UPDATE'.
    • A chave do registro a ser regravado foi alterada pelo programa de aplicação.
  • Outros: DSIDERR, ILLOGIC, IOERR, LENGERR, NOTOPEN, NOSPACE.
Comando DELETE

Formato do comando:


EXEC CICS DELETE Explicação do argumento
DATASET ('NOME ARQUIVO') Especifica-se o nome do arquivo que se deseja acessar.
RIDFLD (WORK-CHAVE) Especifica-se a chave do registro a ser deletado. Obrigatório quando usado a opção 'GENERIC'
GENERIC Indica que a chave informada é parcial, ou seja, nao está sendo informada a chave completa. todos os registros que possuam esta chave parcial serao deletados.
KEYLENGTH (+10) Especifica-se o tamanho da chave genérica. este argumento é usado em conjunto com a opção 'GENERIC' e sómente pode ser usada para arquivos KSDS.
NUMREC (WORK-QTD) O CICS COLOCARA' NESTE CAMPO O NUMERO DE REGISTROS QUE O VSAM DELETOU. ESTE ARGUMENTO SO' PODE SER USADO EM CONJUNTO COM A OPCAO 'GENERIC'. O CAMPO DEVE SER DEFINIDO COMO PIC S9(004) COMP.
RBA Para arquivos ESDS, indica que a area especificada em 'RIDFLD' contem um RBA e nao a chave do registro. Neste caso, a area especificada em 'RIDFLD' deve estar definida PIC S9(008) COMP.

Este comando é utilizado para deletar um registro ou, se especificada uma chave genérica, um grupo de registros.

Caso um registro tenha sido lido com a opção 'UPDATE', este comando pode ser utilizado para deleta-lo. Neste caso as opcões 'RIDFLD', 'KEYLENGTH', 'GENERIC' e 'NUMREC' não podem ser utilizadas.

A opção 'GENERIC' não pode ser utilizada para arquivo com a opção 'LOG=YES' na 'FCT'.

Exemplo do comando:


          EXEC     CICS   DELETE DATASET ('D02TAB')
                                 RIDFLD  (WORK-CHAVE)
                                 KEYLENGTH (+10)
                                 GENERIC
                                 NUMREC  (WORK-QTD)
          END-EXEC.
      

Explicação do exemplo:

O CICS tentará deletar todos os registros que possuam em seu campo chave as 10 primeiras posições iguais as 10 primeiras posições do campo 'WORK-CHAVE'. Após efetuada a deleção, o CICS colocará em 'WORK-QTD' o nÚmero de registros que o VSAM deletou.

CONDICAO DE EXCECAO:

  • NOTFND: O registro indicado não existe no arquivo. Tal condição de exceção só acontecerá se o registro nao foi lido com a opção 'UPDATE'.
  • Outros: DSIDERR, ILLOGIC, INVREQ, IOERR, NOTOPEN.
Comando UNLOCK

Formato do comando:


EXEC CICS UNLOCK Explicação do argumento
DATASET ('NOME ARQUIVO') Especifica-se o nome do arquivo que se deseja acessar.

Este comando é utilizado para liberar o controle exclusivo obtido através do comando READ com opção 'UPDATE' ou através de uma operação de inserção em massa de registros (MASSINSERT).

É utilizado quando um registro foi lido para ser atualizado, porem determinou-se que a atualização nao irá ocorrer.

O controle exclusivo é feito em todo o 'CONTROL INTERVAL' a que pertence o registro.

Exemplo do comando:



          EXEC     CICS  UNLOCK    DATASET ('D02TAB')
          END-EXEC.
      

Explicação do exemplo:

O CICS liberará o controle exclusivo sobre os registros recuperados através do comando 'READ' com a opção 'UPDATE' no arquivo 'D02TAB'.

Condição de exceção:

  • NOTOPEN: O arquivo informado está fechado.
  • Outros: DSIDERR, ILLOGIC, INVREQ, IOERR.



Volta para o início da página

Volta a página anterior

Volta ao Menu Principal