在Oracle 9i中显示外键关系

时间:2008-12-10 01:50:55

标签: oracle

oracle 9i中是否有一个命令显示表的外键以及那些外键引用的表?

我正在搜索,没找到任何东西,但我找到了一个与MySql一起工作的等效命令,即SHOW CREATE TABLE

在oracle的SQL中是否有相应的命令?

我感谢您的回复,但我认为像MySql这样做的方法非常简短。

4 个答案:

答案 0 :(得分:4)

这是另一个答案:dbms_metadata包有一个函数可以返回表定义的DDL。

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

自Oracle 9.2以来,这个软件包显然已经可用了

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

答案 1 :(得分:2)

您可以首先列出表的所有约束以及其他表上的任何引用约束:

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');

如果您对约束有合理的命名约定,则应该可以识别哪些是外键,'FK'前缀/后缀是典型的。

答案 2 :(得分:1)

这可能会做你想要的,它使用Oracle系统视图。但是,我没有方便的Oracle实例来测试它。

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>';

答案 3 :(得分:0)

如果您将来需要外键的DDL,那么事先得到答案:)

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';