|
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.
|