[firebase-br] TABELAS E CAMPOS

Sandro Souza escovadordebits em gmail.com
Sex Dez 5 18:11:14 -03 2008


Bom dia/tarde pessoal.

Esqueci de colocar a ordenação no SELECT do item 3, para que a ordem dos
campos venha como foram declarados na criação da 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')
ORDER BY
  RDB$FIELD_POSITION

2008/12/5 Sandro Souza <escovadordebits em gmail.com>

> 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