[firebase-br] Fw: Duvida nos Tipos de dados do FireBird

Augusto augusto em cmsolucoes.com.br
Qua Jul 27 09:22:07 -03 2005


Eduardo,

  Funcionou perfeitamente. mandou muito bem...

Obrigado pela ajuda...

Augusto



----- Original Message ----- 
From: "eduardo" <eduardo em icontroller.com.br>
To: <lista em firebase.com.br>
Sent: Wednesday, July 27, 2005 8:24 AM
Subject: Re: [firebase-br] Fw: Duvida nos Tipos de dados do FireBird


> Oi Augusto:
>
> Esta query eu montei em função dos tipos que normalmente uso com a 
> finalidade de obter as estrutura da tabela com sua chave primária.
> Na época, observava os campos que usava e via nas Tabelas do Sistema como 
> eles constavam lá. Ocorre que eu não utilizo campos NUMERIC(8,6). Nestes 
> casos, creio que eles sejam armazenados internamente como LONG e tenham 
> precision e scale, quebrando o meu CASE em que classifico LONG sempre como 
> INTEGER.
> A modificação abaixo resolve o problema, porém não sei se, em algum outro 
> tipo que eu não uso, ocorrerá problemas.
>
> SELECT DISTINCT
>     A.RDB$FIELD_POSITION   AS ORDER_ID,
>     A.RDB$FIELD_NAME AS F_NAME,
>     B.RDB$FIELD_TYPE,
>     B.RDB$FIELD_SCALE,
>     CASE
> /* *Esta linha é nova* */
>         WHEN B.RDB$FIELD_PRECISION > 0 THEN 
> 'NUMERIC('||CAST(B.RDB$FIELD_PRECISION AS 
> VARCHAR(2))||','||CAST(B.RDB$FIELD_SCALE*-1 AS VARCHAR(2))||')'
>         WHEN C.RDB$TYPE_NAME='LONG'  THEN 'INTEGER'
>         WHEN C.RDB$TYPE_NAME='SHORT' THEN 'SMALLINT'
> /* *Modificada e movida para cima*
>         WHEN C.RDB$TYPE_NAME='INT64' THEN 
> 'NUMERIC('||CAST(B.RDB$FIELD_PRECISION AS 
> VARCHAR(2))||','||CAST(B.RDB$FIELD_SCALE*-1 AS VARCHAR(2))||')'
> */
>         WHEN C.RDB$TYPE_NAME='VARYING' THEN 
> 'VARCHAR('||B.RDB$CHARACTER_LENGTH||')'
>         WHEN C.RDB$TYPE_NAME='TEXT' THEN 
> 'CHAR('||B.RDB$CHARACTER_LENGTH||')'
>         WHEN C.RDB$TYPE_NAME='BLOB' THEN 'BLOB SUB_TYPE 
> '||CAST(B.RDB$FIELD_SUB_TYPE AS CHAR(1))
>     ELSE
>         C.RDB$TYPE_NAME
>     END AS F_TIPO,
>     CASE
>         WHEN A.RDB$NULL_FLAG IS NULL  THEN ''
>     ELSE
>         'NOT NULL'
>     END AS F_NULL,
>     F.RDB$FIELD_NAME AS F_PRIMARY
> FROM
>     RDB$RELATION_FIELDS
>         A
>     LEFT JOIN RDB$FIELDS
>         B ON A.RDB$FIELD_SOURCE=B.RDB$FIELD_NAME
>     LEFT JOIN RDB$TYPES
>         C ON C.RDB$FIELD_NAME='RDB$FIELD_TYPE' AND 
> B.RDB$FIELD_TYPE=C.RDB$TYPE
>     LEFT JOIN RDB$RELATION_CONSTRAINTS
>         E ON A.RDB$RELATION_NAME=E.RDB$RELATION_NAME AND 
> E.RDB$CONSTRAINT_TYPE='PRIMARY KEY'
>     LEFT JOIN RDB$INDEX_SEGMENTS
>         F ON E.RDB$INDEX_NAME=F.RDB$INDEX_NAME AND 
> A.RDB$FIELD_NAME=F.RDB$FIELD_NAME
> WHERE
>     A.RDB$RELATION_NAME = 'CADASTRO'
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 






Mais detalhes sobre a lista de discussão lista