2010-07-09 117 views
3

哪个表包含有关约束的详细信息(例如外键引用的表)?表'all_cons_columns','all_constraints'只包含那些不太有用的约束名称。 我目前使用dbms_metadata.get_ddl(),但它不适用于所有的数据库。查看Oracle有关主键/外键约束的元数据

谢谢。

回答

5

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

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

+0

duh。刚才看到了。谢谢。 – ssr532 2010-07-09 09:43:45

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 
+0

感谢您的查询。 – ssr532 2010-07-09 09:44:11

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;