[firebase-br] Como Buscar os campos relacionados das FKs?

Douglas Tosi douglasht em gmail.com
Seg Dez 1 10:57:24 -03 2008


2008/12/1 João Dias de Carvalho Neto <jdias.bjsoftware em gmail.com>:
> estou precisando da ajudinha de vocês para retornar algumas infos das
> tabelas de sistema
>
> é o seguinte, preciso retornar todas as informações das FK´s de uma tabela
>
> consegui alguma coisa já no Select postado abaixo, mas não consegui obter os
> dados de campos de foram que foram relacionados na FK  :-[
>
> Alguém poderia me dar uma luz?

O que você precisa é o campo RDB$REF_CONSTRAINTS.rdb$const_name_uq,
que indica o nome do constraint referenciado pela chave estrangeira.
Ou seja, a chave primária ou única. Com ele, você volta até a
rdb$index_segments e pega o nome dos campos que compõe esse
constraint.
Tente assim:

SELECT
 A.RDB$INDEX_NAME AS INDICE,
 A.RDB$RELATION_NAME AS TABELA,
 B.RDB$FIELD_NAME AS CAMPOS_INNER,
 C.RDB$UPDATE_RULE AS ON_UPDATE,
 C.RDB$DELETE_RULE AS ON_DELETE,

 IS2.rdb$index_name AS REFERENCED_CONSTRAINT,
 IS2.rdb$field_name AS REFERENCED_FIELD

FROM RDB$RELATION_CONSTRAINTS A
LEFT JOIN RDB$INDEX_SEGMENTS B
ON B.RDB$INDEX_NAME = A.RDB$INDEX_NAME
LEFT JOIN RDB$REF_CONSTRAINTS C
ON C.RDB$CONSTRAINT_NAME=A.RDB$INDEX_NAME

LEFT JOIN rdb$index_segments IS2
ON IS2.rdb$index_name = C.rdb$const_name_uq

WHERE
  A.RDB$RELATION_NAME = :NOME_TABELA and
  A.RDB$CONSTRAINT_TYPE ='FOREIGN KEY'
ORDER BY
  A.RDB$INDEX_NAME, B.RDB$FIELD_POSITION

hth,
-- 
Douglas Tosi
www.sinatica.com




Mais detalhes sobre a lista de discussão lista