[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