Exibindo relações de chave estrangeira em Oracle 9i

votos
3

Existe um comando em Oracle 9i que exibe as chaves estrangeiras de uma tabela e também a tabela que essas chaves estrangeiras de referência?

Eu estava procurando, não encontrou nada, mas eu achei um comando equivalente que trabalha com MySql que é SHOW CREATE TABLE

Existe um comando equivalente para este dentro do SQL da Oracle?

Agradeço a sua resposta, no entanto eu pensei que havia realmente um curto maneira de fazer isso como MySql.

Publicado 10/12/2008 em 02:50
fonte usuário
Em outras línguas...                            


4 respostas

votos
4

Aqui está outra resposta: O dbms_metadatapacote tem uma função que pode retornar o DDL para uma definição de tabela.

SELECT dbms_metadata.get_ddl('TABLE', '<table>', '<schema>') FROM dual;

Este pacote foi aparentemente disponível desde Oracle 9.2

http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metada.htm#1656

Respondeu 10/12/2008 em 03:48
fonte usuário

votos
2

Você poderia começar listando todas as restrições para a mesa juntamente com qualquer restrição referenciados em outras tabelas:

SELECT
     acc.table_name
    ,acc.column_name
    ,acc.constraint_name
    ,ac.r_constraint_name AS referenced_constraint
FROM all_cons_columns acc
INNER JOIN all_constraints ac ON (acc.constraint_name = ac.constraint_name)
WHERE acc.table_name = UPPER('your_table_here');

Se você tiver convenções de nomenclatura sensatas para suas limitações, deve ser possível identificar quais são as chaves estrangeiras, prefixo um 'FK' / sufixo é típico.

Respondeu 10/12/2008 em 03:36
fonte usuário

votos
1

Isso pode fazer o que quiser, ele usa exibições do sistema Oracle. Eu não tenho uma instância Oracle útil para testá-lo, no entanto.

SELECT fk.owner, fk.constraint_name, fk.table_name, fc.column_name,
  pk.owner, pk.constraint_name, pk.table_name, pc.column_name
FROM all_constraints fk
 JOIN all_cons_columns fc ON (fk.owner = fc.owner AND fk.constraint_name = fc.constraint_name)
 JOIN (all_constraints pk
   JOIN all_cons_columns pc ON (pk.owner = pc.owner AND pk.constraint_name = pc.constraint_name)) 
 ON (fk.r_owner = pk.owner AND fk.r_constraint_name = pk.constraint_name
   AND fc.position = pc.position)
WHERE fk.constraint_type = 'R' AND pk.constraint_type IN ('P', 'U')
  AND fk.owner = '<schema>' AND fk.table_name = '<table>';
Respondeu 10/12/2008 em 03:34
fonte usuário

votos
0

Se você precisar o DDL para as chaves estrangeiras no futuro, então aqui está a resposta antecipadamente :)

select 
  DBMS_METADATA.GET_DEPENDENT_DDL('REF_CONSTRAINT' ,atb.table_name, atb.owner) 
from 
  all_tables atb, all_constraints ac
where 
  atb.owner = ac.owner and
  ac.constraint_type = 'R' and
  ac.table_name = atb.table_name and
  atb.owner = 'YOURSCHEMA';
Respondeu 08/01/2010 em 23:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more