[firebase-br] TABELAS E CAMPOS
Sandro Souza
escovadordebits em gmail.com
Sex Dez 5 18:07:52 -03 2008
Bom dia/tarde João.
Utilize a ZQuery para obter essas informações de esquema (mapa) do banco de
dados.
Os respectivos SELECTs são os seguintes:
1 - Obtendo a lista de tabelas criadas pelo usuário:
SELECT
RDB$RELATION_NAME NOME_DA_TABELA
FROM
RDB$RELATIONS
WHERE
((RDB$SYSTEM_FLAG IS NULL)OR
(RDB$SYSTEM_FLAG <> 1))AND
(RDB$VIEW_BLR IS NULL)
ORDER BY
RDB$RELATION_NAME
RDB$SYSTEM_FLAG = 1 -> Tabela de sistema (RDB$RELATIONS, etc...)
RDB$SYSTEM_FLAG = 0 ou NULL -> Tabela criada pelo usuário (CLIENTES,
PRODUTOS, etc...)
RDB$VIEW_BLR = NULL -> É uma tabela e não uma visão.
2 - Obtendo a lista dos nomes dos campos de uma tabela:
SELECT
RDB$FIELD_NAME NOME_DO_CAMPO
FROM
RDB$RELATION_FIELDS
WHERE
RDB$RELATION_NAME = 'NOME_DA_TABELA'
ORDER BY
RDB$FIELD_POSITION
3 - Obtendo todas as informações sobre os campos de uma tabela:
SELECT
A.RDB$FIELD_NAME NOME_DO_CAMPO,
C.RDB$TYPE_NAME TIPO,
B.RDB$FIELD_SUB_TYPE SUBTIPO,
B.RDB$FIELD_LENGTH TAMANHO,
B.RDB$SEGMENT_LENGTH SEGMENTO,
B.RDB$FIELD_PRECISION PRECISAO,
B.RDB$FIELD_SCALE CASAS_DECIMAIS,
A.RDB$DEFAULT_SOURCE VALOR_PADRAO,
A.RDB$NULL_FLAG OBRIGATORIO
FROM
RDB$RELATION_FIELDS A,
RDB$FIELDS B,
RDB$TYPES C
WHERE
(A.RDB$RELATION_NAME = 'NOME_DA_TABELA')AND
(B.RDB$FIELD_NAME = A.RDB$FIELD_SOURCE)AND
(C.RDB$TYPE = B.RDB$FIELD_TYPE)AND
(C.RDB$FIELD_NAME = 'RDB$FIELD_TYPE')
Agora vamos entender o significado dos campos retornados:
3.1 - NOME_DO_CAMPO
Informa o nome do campo, como o próprio nome sugere.
3.2 - TIPO
Nome do tipo interno do campo, ou seja, o formato utilizado internamente.
Entre outros valores, esses são os mais comuns:
3.2.1 - SHORT (O valor é armazenado como um inteiro de 16 bits com sinal).
3.2.2 - LONG (O valor é armazenado como um inteiro de 32 bits com sinal).
3.2.3 - INT64 (O valor é armazenado como um inteiro de 64 bits com sinal).
3.2.4 - FLOAT (O valor é armazenado como uma aproximação (ponto flutuante)
em 32 bits, tipo FLOAT normal).
3.2.5 - DOUBLE (O valor é armazenado como uma aproximação (ponto flutuante)
em 64 bits, tipo DOUBLE PRECISION normal).
3.2.6 - TEXT (O valor é uma sequência de caracteres com tamanho fixo, ou
seja, é o tipo CHAR).
3.2.7 - VARYING (O valor é uma sequência de caracteres com tamanho variável,
ou seja, é o tipo VARCHAR).
3.2.8 - BLOB (O valor é uma sequência de bytes/caracteres com tamanho
variável, ou seja, é o tipo BLOB).
3.2.9 - DATE (O valor é uma data, ou seja, é o tipo DATE).
3.2.10 -TIME (O valor é uma hora:minuto:segundo, ou seja, é o tipo TIME).
3.2.11 - TIMESTAMP (O valor é uma data/hora, ou seja, é o tipo TIMESTAMP).
3.3 - SUBTIPO
É o subtipo do tipo do campo, ou seja, combinando o tipo e o subtipo, temos
o tipo que foi declarado na criação do campo.
Veja as seguintes combinações:
Tipo SHORT com subtipo 0 é SMALLINT.
Tipo SHORT com subtipo 1 é NUMERIC.
Tipo SHORT com subtipo 2 é DECIMAL.
Tipo LONG com subtipo 0 é INTEGER.
Tipo LONG com subtipo 1 é NUMERIC.
Tipo LONG com subtipo 2 é DECIMAL.
Tipo INT64 com subtipo 0 é BIGINT.
Tipo INT64 com subtipo 1 é NUMERIC.
Tipo INT64 com subtipo 2 é DECIMAL.
Tipo BLOB com subtipo 1 é um BLOB que armazena texto (campos do tipo
"memo").
Tipo BLOB com qualquer outro subtipo é um BLOB que armazena dados binários
qualquer (imagens, arquivos, etc...).
3.4 - TAMANHO
É o tamanho, em bytes, que cada valor ocupa dentro do banco de dados.
Para o tipo CHAR, significa o tamanho fixo do texto.
Para o tipo VARCHAR, significa o tamanho máximo do texto.
3.5 - SEGMENTO
Significa o tamanho de segmento do campo do tipo BLOB, ou seja, é NULL para
os outros tipos.
3.6 - PRECISAO
É a quantidade total de dígitos, incluindo as casas decimais.
Em campos não numéricos, é NULL.
3.7 - CASAS_DECIMAIS
É a quantidade de casas decimais (CASAS_DECIMAIS <= PRECISAO).
Em campos não numéricos, é zero.
3.8 - VALOR_PADRAO
É o valor padrão a ser atribuido a esse campo caso nenhum valor seja
informado para ele (cláusula DEFAULT).
3.9 - OBRIGATORIO
Indica se esse campo é obrigatório (1) ou não (NULL).
Outras informações podem ser estraidas do banco de dados, que é o que o IB
Expert, entre outras ferramentas, fazem para gerar os scripts de criação das
estruturas do banco, por exemplo.
Espero ter ajudado mais que atrapalhado. :D
2008/12/5 joao_jma <joao_jma em itelefonica.com.br>
> como extrair nomes das tabelas e dos campos de um banco firebird usando o
> ZEOS ???
>
>
> abraço
>
> João M. de Amorim - Informática:
> Andreza Enxovais - Ibitinga/SP
> ((16) 3341-9000
> È(16) 9239-0959
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista