Olá galera, nesta Quick Tips, mostrarei a extração no Firebird das informações de uma determinada tabela, como por exemplo, o nome do campo, sua descrição, tipo, tamanho, se o mesmo aceita valor nulo ou não, sua precisão, qual Charset o mesmo está usando, etc. Tudo isso de uma determinada tabela do seu Banco de Dados.
Vamos ao Script para tal feito:
SELECT R.RDB$FIELD_NAME AS Nome_Campo,
R.RDB$DESCRIPTION AS Descricao_Campo,
R.RDB$DEFAULT_VALUE AS Valor_Padrao_Campo,
CASE R.RDB$NULL_FLAG
WHEN 1 THEN 'SIM'
ELSE 'NÃO'
END AS Restricao_NotNull_Campo,
F.RDB$FIELD_LENGTH AS Tamanho_Campo,
F.RDB$FIELD_PRECISION AS Precisao_Campo,
F.RDB$FIELD_SCALE AS Escala_Campo,
CASE F.RDB$FIELD_TYPE
WHEN 7 THEN 'SMALLINT'
WHEN 8 THEN 'INTEGER'
WHEN 9 THEN 'QUAD'
WHEN 10 THEN 'FLOAT'
WHEN 11 THEN 'D_FLOAT'
WHEN 12 THEN 'DATE'
WHEN 13 THEN 'TIME'
WHEN 14 THEN 'CHAR'
WHEN 16 THEN 'INT64'
WHEN 27 THEN 'DOUBLE'
WHEN 35 THEN 'TIMESTAMP'
WHEN 37 THEN 'VARCHAR'
WHEN 40 THEN 'CSTRING'
WHEN 261 THEN 'BLOB'
ELSE 'UNKNOWN'
END AS Tipo_Campo,
F.RDB$FIELD_SUB_TYPE AS SubTipo_Campo,
CSET.RDB$CHARACTER_SET_NAME AS CHARSET_Campo
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 = 'TblCliente'
ORDER BY R.RDB$FIELD_POSITION;
Uma observação interessante foi o CASE incluído no Select, pois devido ao campo F.RDB$FIELD_TYPE ser um Integer, devemos montar um case de acordo com o conteúdo deste campo para traduzir melhor o tipo de cada um dos campos da nossa tabela.
Como podemos notar, foi feito um Filtro apenas para a tabela TblCliente. Você pode pegar informações de todas as suas tabelas, alterando apenas esta parte do script.
Uma dica para quem for usar este exemplo, e não quiser que os valores fiquem nulos, faça como no campo Restricao_NotNull_Campo:
CASE R.RDB$DEFAULT_VALUE
WHEN 1 THEN 'SIM'
ELSE 'NÃO'
END AS Valor_Padrao_Campo
O campo que estamos usando como teste não tem motivos para ficar sim ou não, pois o mesmo mostrará um valor default que exista na sua tabela.
Como vimos, o Firebird possui diversas tabelas com as informações de todo o banco de dados, como os tipos de campos, qual o nome e posição destes campos em relação à tabela.
Existem muitas outras tabelas com diversas outras informações sobre o Firebird.
Fico por aqui ate à próxima Quick Tips.