查看oracle关于主/外键约束的元数据

时间:2010-07-09 07:47:51

标签: sql oracle oracle10g metadata

哪个表包含有关约束的详细信息(例如外键所指的表)?表'all_cons_columns','all_constraints'仅包含约束的名称,这些名称不是很有用。 我目前正在使用dbms_metadata.get_ddl(),但它不适用于所有数据库。

感谢。

4 个答案:

答案 0 :(得分:5)

一切都在那里:ALL_CONSTRAINTS中的列R_CONSTRAINT_NAME包含外键引用的PK / UK约束的名称。然后,您可以查找该约束以获取引用表的TABLE_NAME。

查看ALL_CONS_COLUMNS时,外键中列的位置将与主/唯一键中列的位置匹配。

答案 1 :(得分:3)

此语句列出表,约束名称和外键表名称:

select c.table_name,c.constraint_name,  --c.r_constraint_name, 
  cc.table_name
from all_constraints c
inner join all_constraints cc on c.r_constraint_name = cc.constraint_name

答案 2 :(得分:3)

要检索外键并生成脚本以创建它们,可以使用以下查询:

SELECT 
   'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name 
   || ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name 
   || ' (' || jcol.column_name || ');' as commandforeign
FROM
   (SELECT 
       uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name
    FROM 
       USER_CONSTRAINTS uc, USER_CONS_COLUMNS col
    WHERE 
       uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a
 INNER JOIN 
    USER_CONS_COLUMNS jcol
 ON 
    a.r_constraint_name=jcol.constraint_name;

答案 3 :(得分:0)

看看:Reverse Engineering a Data Model。基于此,我做了一个Python program that dumps Oracle db schema to text。有PRIMARY_KEYS_INFO_SQLFOREIGN_KEYS_INFO_SQL可以执行您感兴趣的内容。