Selecionar Colunas no Metadados
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
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
Onhide86
Curtidas 0
Respostas
Thomaz_prg
25/07/2008
é o campo RDB$NULL_FLAG da tabela RDB$RELATION_FIELDS.
GOSTEI 0
Onhide86
25/07/2008
E como eu acrescento isso no SQL que eu citei no post anterior?
Valeu, abraço.
Valeu, abraço.
GOSTEI 0
Thomaz_prg
25/07/2008
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´
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´
GOSTEI 0
Onhide86
25/07/2008
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
GOSTEI 0
Thomaz_prg
25/07/2008
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
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
GOSTEI 0
Onhide86
25/07/2008
Valeu Tomaz, me ajudasse bastante eim, muito obrigado, um abraço.
GOSTEI 0
Onhide86
25/07/2008
Tomaz, outra coisa, tem como incluir a posição da coluna?
Valeu.
Valeu.
GOSTEI 0
Thomaz_prg
25/07/2008
campo RDB$FIELD_POSITION da tabela RDB$RELATION_FIELDS
GOSTEI 0
Onhide86
25/07/2008
Mas como eu incluo naquele select?
GOSTEI 0
Thomaz_prg
25/07/2008
Antes do ´from´ inclua o campo:
rdb$relation_fields.rdb$field_position as posicao_campo
rdb$relation_fields.rdb$field_position as posicao_campo
GOSTEI 0
Onhide86
25/07/2008
Não deu thomaz
GOSTEI 0
Thomaz_prg
25/07/2008
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?
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?
GOSTEI 0
Onhide86
25/07/2008
Deu certo, valeu Thomaz, abraço.
GOSTEI 0
Onhide86
25/07/2008
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.
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.
GOSTEI 0
Álison Bissoli
25/07/2008
o que eu quero é exatamente isso, só que com a descrição do campo...
GOSTEI 0