Fórum tipo do campo na tabela #390595

16/11/2010

0

Olá, Boa Tarde. Gostaria de saber se existe um select (firebird 2.1) que me retorna o tipo do campo(ex: integer,date,varchar,etc..) de uma tabela específica .

algo parecido com isso :




SELECT RDB$RELATION_CONSTRAINTS.RDB$RELATION_NAME AS TABELA,
RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME AS CHAVE,
RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME AS INDICE_DA_CHAVE,
RDB$INDEX_SEGMENTS.RDB$FIELD_NAME AS CAMPO,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION AS POSICAO
FROM RDB$RELATION_CONSTRAINTS,
RDB$INDICES,
RDB$INDEX_SEGMENTS
WHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
AND RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
AND RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$INDICES.RDB$INDEX_NAME
ORDER BY RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME,
RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION


Obrigado.
Mais Dominio

Mais Dominio

Responder

Posts

16/11/2010

Wesley Yamazack

Olá Valter.


Segue sua dúvida respondida :

SELECT r.RDB$FIELD_NAME AS field_name,
        r.RDB$DESCRIPTION AS field_description,
        r.RDB$DEFAULT_VALUE AS field_default_value,
        r.RDB$NULL_FLAG AS field_not_null_constraint,
        f.RDB$FIELD_LENGTH AS field_length,
        f.RDB$FIELD_PRECISION AS field_precision,
        f.RDB$FIELD_SCALE AS field_scale,
        CASE f.RDB$FIELD_TYPE
          WHEN 261 THEN 'BLOB'
          WHEN 14 THEN 'CHAR'
          WHEN 40 THEN 'CSTRING'
          WHEN 11 THEN 'D_FLOAT'
          WHEN 27 THEN 'DOUBLE'
          WHEN 10 THEN 'FLOAT'
          WHEN 16 THEN 'INT64'
          WHEN 8 THEN 'INTEGER'
          WHEN 9 THEN 'QUAD'
          WHEN 7 THEN 'SMALLINT'
          WHEN 12 THEN 'DATE'
          WHEN 13 THEN 'TIME'
          WHEN 35 THEN 'TIMESTAMP'
          WHEN 37 THEN 'VARCHAR'
          ELSE 'UNKNOWN'
        END AS field_type,
        f.RDB$FIELD_SUB_TYPE AS field_subtype,
        coll.RDB$COLLATION_NAME AS field_collation,
        cset.RDB$CHARACTER_SET_NAME AS field_charset
   FROM RDB$RELATION_FIELDS r
   LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME
   LEFT JOIN RDB$COLLATIONS coll ON f.RDB$COLLATION_ID = coll.RDB$COLLATION_ID
   LEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID
  WHERE r.RDB$RELATION_NAME='CLIENTE'  -- table name
ORDER BY r.RDB$FIELD_POSITION


Veja se isso irá resolver teu problema, fiz aqui no FB 2.1, e me listou tudo certinho.

Um abraço
Wesley Y
Responder

Gostei + 0

16/11/2010

Mais Dominio

Muito Obrigado, era isso mesmo...
Responder

Gostei + 0

16/11/2010

Wesley Yamazack

Olá Valter,

Estamos a disposição.

Um abraço

Wesley Y
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar