Selecionar Colunas no Metadados

25/07/2008

1

Bom pessoal, o meu problema é um pouco dificil de se resolver, mas com este select abaixo eu consigo obter o nome do campo, tipo e tamanho mas gostaria que alem desses eu tivesse se ele é nulo ou não, abraços.


select rdb$relation_fields.rdb$relation_name,
rdb$relation_fields.rdb$field_name,
case
when rdb$types.rdb$type_name = ´VARYING´ then ´VARCHAR´
else rdb$types.rdb$type_name
end field_type,
rdb$fields.rdb$field_length
from rdb$relation_fields
join rdb$fields
on rdb$fields.rdb$field_name =
rdb$relation_fields.rdb$field_source
join rdb$types
on rdb$fields.rdb$field_type = rdb$types.rdb$type and
rdb$types.rdb$field_name = ´RDB$FIELD_TYPE´
where (substring(rdb$relation_fields.rdb$relation_name from 1 for 4) <>
´RDB$´) and (RDB$RELATION_NAME=:id_tabela)
order by rdb$relation_fields.rdb$relation_name


Responder

Posts

25/07/2008

Thomaz_prg

é o campo RDB$NULL_FLAG da tabela RDB$RELATION_FIELDS.


Responder

25/07/2008

Onhide86

E como eu acrescento isso no SQL que eu citei no post anterior?
Valeu, abraço.


Responder

25/07/2008

Thomaz_prg

select rdb$relation_fields.rdb$relation_name,
rdb$relation_fields.rdb$field_name,
case
when rdb$types.rdb$type_name = ´VARYING´ then ´VARCHAR´
else rdb$types.rdb$type_name
end field_type,
rdb$fields.rdb$field_length,
[b:9aee759128]coalesce( rdb$relation_fields.rdb$null_flag, 0) AS NAO_NULAVEL[/b:9aee759128]
from rdb$relation_fields
join rdb$fields
on rdb$fields.rdb$field_name =
rdb$relation_fields.rdb$field_source
join rdb$types
on rdb$fields.rdb$field_type = rdb$types.rdb$type and
rdb$types.rdb$field_name = ´RDB$FIELD_TYPE´
where (substring(rdb$relation_fields.rdb$relation_name from 1 for 4) <>
´RDB$´) and (RDB$RELATION_NAME=:id_tabela)
order by rdb$relation_fields.rdb$relation_name


Se o campo Nao_Nulavel for 1, é pq o campo é ´not null´


Responder

25/07/2008

Onhide86

funcionou perfeitamente, mas desculpa te encomodar novamente, tem como tipo em vez de aparecer 1 aparecer NOT NULL, valeu ai pela ajuda, uma abraço


Responder

25/07/2008

Thomaz_prg

troque a linha
coalesce( rdb$relation_fields.rdb$null_flag, 0) AS NAO_NULAVEL


Por

case when coalesce( rdb$relation_fields.rdb$null_flag, 0) = 1 THEN ´NOT ´ ELSE ´´ END||´NULL´ AS NAO_NULAVEL


Responder

26/07/2008

Onhide86

Valeu Tomaz, me ajudasse bastante eim, muito obrigado, um abraço.


Responder

27/07/2008

Onhide86

Tomaz, outra coisa, tem como incluir a posição da coluna?
Valeu.


Responder

27/07/2008

Thomaz_prg

campo RDB$FIELD_POSITION da tabela RDB$RELATION_FIELDS


Responder

27/07/2008

Onhide86

Mas como eu incluo naquele select?


Responder

27/07/2008

Thomaz_prg

Antes do ´from´ inclua o campo:

rdb$relation_fields.rdb$field_position as posicao_campo


Responder

27/07/2008

Onhide86

Não deu thomaz


Responder

27/07/2008

Thomaz_prg

select rdb$relation_fields.rdb$relation_name,
rdb$relation_fields.rdb$field_name,
case
when rdb$types.rdb$type_name = ´VARYING´ then ´VARCHAR´
else rdb$types.rdb$type_name
end field_type,
rdb$fields.rdb$field_length,
case when coalesce( rdb$relation_fields.rdb$null_flag, 0) = 1 THEN ´NOT ´ ELSE ´´ END||´NULL´ AS NAO_NULAVEL,
[b:fd2dcb0f3b]rdb$relation_fields.rdb$field_position as posicao_campo[/b:fd2dcb0f3b]
from rdb$relation_fields
join rdb$fields
on rdb$fields.rdb$field_name =
rdb$relation_fields.rdb$field_source
join rdb$types
on rdb$fields.rdb$field_type = rdb$types.rdb$type and
rdb$types.rdb$field_name = ´RDB$FIELD_TYPE´
where (substring(rdb$relation_fields.rdb$relation_name from 1 for 4) <>
´RDB$´) and (RDB$RELATION_NAME=:id_tabela)
order by rdb$relation_fields.rdb$relation_name


Seu select ficou assim?


Responder

27/07/2008

Onhide86

Deu certo, valeu Thomaz, abraço.


Responder

02/08/2008

Onhide86

Thomaz, preciso de uma ajuda sua:

tenho o seguinte select:
SELECT RDB$INDEX_NAME ChaveEstrangeira, RDB$FOREIGN_KEY
Campo, RDB$RELATION_NAME Tabela FROM RDB$INDICES
WHERE RDB$UNIQUE_FLAG IS NULL
AND RDB$FOREIGN_KEY IS NOT NULL

Ele me retorna as chaves estrangeiras, mas esta faltando um campo o campo que recebe essa chave estrangeira, vc consegue incluir este campo que esta fantando ai nesse select para mim?, valeu ai se puder me ajudar, desde já agradeço, abraço.


Responder
o que eu quero é exatamente isso, só que com a descrição do campo...


Responder