Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!

Arquivos externos

A linguagem OPUS permite atualizações de registros em arquivos externos ao OpenBASE.

Os arquivos externos nem sempre são criados pela OPUS, como por exemplo, os arquivos da COBOL. A única restrição na utilização destes arquivos se refere aos arquivos indexados, pois possuem estrutura própria. A OPUS desconhece estas estruturas, denominadas de proprietárias, portanto, só permite acesso seqüencial para leitura desses arquivos.

Arquivos externos são definidos pela OPUS através de visões, denominadas micro-esquemas, que correspondem à estrutura da área de dados do arquivo. A área reservada para cada item do arquivo é identificada pela OPUS por um nome em relação ao deslocamento do tamanho deste item no registro.

De modo geral, para realizar operações sobre um arquivo externo, deve-se especificar o nome do micro-esquema após o comando USE ou definir a estrutura do arquivo dentro do próprio programa-fonte. Desta forma, o micro-esquema é incorporado a esta fonte durante a compilação do programa e seus itens são declarados como variáveis locais.

Micro-esquemas

Um micro-esquema é um arquivo texto que contém a estrutura do arquivo externo.

Numa aplicação, caso o arquivo externo referenciado em um micro-esquema não exista, ele será criado automaticamente, no momento da execução do programa.

Definição de um micro-esquemas

Existem várias maneiras de se definir um micro-esquema que serão descritas a seguir, mas todas seguem a mesma forma. Define-se a estrutura de um arquivo externo em dois passos:

A primeira linha não vazia descreve o arquivo e deve conter as seguintes informações, como mostra a Sintaxe

<nome> <tipo> LEN (<tamanho>) [<modo>] [EXCLUSIVE]

Onde:

<nome>

representa o nome do arquivo externo

Pode ser:

O caractere $ (cifrão), determina que o nome do arquivo será definido pela variável FILE.

O nome de um arquivo externo não deve ultrapassar 79 caracteres.

<tipo>     representa o tipo do arquivo externo.

Tipos de arquivo externo

Os arquivos externos podem ser dos seguintes tipos:

L e M - Seqüencial em linha

Estes tipos de arquivos possuem um tamanho de registro variável e todo registro deve terminar com um caractere de nova linha (NL = \n). São excluídos os brancos à direita.

O tipo L não permite a alteração no tamanho do registro em comandos CHANGE. Nos comandos DELETE, os registros são preenchidos com -. A inclusão de registros é feita no final do arquivo com o comando APPEND.

O tipo M permite a alteração de registros em comandos CHANGE, pois cria-se um novo arquivo. Pela mesma razão, os comandos DELETE excluem efetivamente os registros do arquivo e o comando INSERT permite inserir registros no meio do arquivo.

S - Seqüencial

Este tipo de arquivo tem tamanho de registro fixo e não contém o caractere de nova linha.

I - Indexado

Este tipo de arquivo tem estrutura proprietária da linguagem OPUS e seu primeiro item deve ser o item chave. Não permite duplicidade de valores para chave (chave única).
O arquivo pode ocupar no maximo 16.777.215 bytes.
Com a opção MAXCAB o arquivo pode ocupar 4.294.967.295 bytes (4 GB)

R - Relativo     

Este tipo de arquivo tem tamanho de registro fixo e todo registro deve terminar com um caractere de nova linha (NL = \n).

X - Indexado

Este tipo de arquivo tem estrutura proprietária da linguagem OPUS e seu primeiro item deve ser o item chave. Não permite duplicidade de valores para chave (chave única).
Sem a opção MAXCAB o arquivo pode ter no maximo 16.777.215 registros ocupando no maximo 4.294.967.295 bytes (4 GB)
Com a opção MAXCAB o arquivo pode ter no máximo 4.294.967.295 registros ocupando no maximo 4.294.967.295 bytes (4 GB)

Com a opção BITS64 o arquivo pode ter no máximo 9.223.372.036.854.775.807 bytes
Sem a opção BITS64 o arquivo pode ter no máximo 4 GB.

<tamanho> representa o tamanho total do registro (tamanho do maior registro).

<modo> representa o modo para utilização do arquivo.

Pode ser:

INPUT somente para leitura.

OUTPUT somente para gravação.

Por omissão é assumido INPUT / OUTPUT.

EXCLUSIVE determina exclusividade de utilização do arquivo. Só para arquivos indexados.

Notas:

As linhas subseqüentes não vazias descrevem os campos do registro e devem conter as seguintes informações, como mostra a Sintaxe

<item> <tipo_tamanho> [POS <número>] [KEY]

Onde:

<item>

Representa o nome do campo do arquivo. Deve se iniciar por letra, ter no máximo 12 caracteres e não ter duplicata.

<tipo_tamanho>

Representa o tipo e o tamanho do item.

POS <número>

Informa a posição inicial do item no registro, permitindo redefinição de itens. Todo registro começa na posição 1. Um campo pode redefinir outro, isto é, possuir posições comuns no registro. No programa que utilizar os campos, estes serão vistos como variáveis distintas. Por este motivo, na inclusão de registros, os campos que redefinem outros devem ser ignorados.

KEY

Determina que o campo será a chave única de arquivo indexado.

Exemplos de micro-esquema

Utiliza-se um editor de textos, e segue-se a sintaxe descrita anteriormente.

Exemplo 1

Neste exemplo criaremos um arquivo seqüencial de nome ag_tel de tamanho 89. Note que o tamanho é o somatório do tamanho de todos os campos. Nome do micro-esquema agenda_tel.d.

ag_tel     S LEN(89)

nome     U20

tele     U14

ende     U50

cep    N05

Exemplo 2

Neste exemplo criaremos um arquivo indexado de nome /usr/arq/empresas onde a chave será o campo com o CGC da empresa. Nome do micro-esquema: empresas.d.

/usr/arq/empresas     I LEN(104)

emp_cgc     N14     KEY

emp_nom     U50

emp_rua     U25

emp_num     N08

emp_cep     N05

emp_uf    U02

emp_end     U40     POS 64

Exemplo 3

Neste exemplo criaremos um arquivo temporário com a estrutura do arquivo descrito no primeiro exemplo. Nome do micro-esquema: tmp_agtel.d.

# S LEN(89)

nome     U20

tele     U14

ende     U50

cep     N05

Exemplo 4

Podemos definir vários arquivos externos em um único micro-esquema (biblioteca de micro-esquemas). Utilizaremos os exemplos anteriores para demonstrar este recurso. Neste caso utiliza-se o editor de textos para criar a biblioteca e para identificar cada módulo (micro-esquema). Utiliza-se o caractere % (percentual), que deve ser o primeiro caractere da linha, seguido do nome do micro-esquema.

Exemplo

Nome da biblioteca bib_est.d.

%ag_tel

ag_tel     S LEN(89)

nome     U20

tele     U14

ende     U50

cep     N05

%empresas

/usr/arq/empresas     I LEN(104)

emp_cgc     N14     KEY

emp_nom     U50

emp_rua     U25

emp_num     N08

emp_cep     N05

emp_uf         U02

emp_end     U40     POS 64

%tmp_agtel

# S LEN(89)

nome     U20

tele     U14

ende     U50

cep     N05

Anterior Sumário Próximo OpenBASE! o Banco de Dados inteligente. Fale conosco!