[firebase-br] Fw: Duvida nos Tipos de dados do FireBird
eduardo
eduardo em icontroller.com.br
Qua Jul 27 08:24:24 -03 2005
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'
Mais detalhes sobre a lista de discussão lista