我正在尝试查找一个查询,它将返回一个表的外键列表以及它们引用的表和列 . 我在那里一半
SELECT a.table_name,
a.column_name,
a.constraint_name,
c.owner
FROM ALL_CONS_COLUMNS A, ALL_CONSTRAINTS C
where A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
and a.table_name=:TableName
and C.CONSTRAINT_TYPE = 'R'
但我仍然需要知道此键引用了哪个表和主键 . 我怎么会这样?
15 回答
引用的主键在表
ALL_CONSTRAINTS
的r_owner
和r_constraint_name
列中描述 . 这将为您提供所需的信息:试试这个:
这是一个我们使用的通用脚本,非常方便 .
保存它以便您可以直接执行它(@ fkeys.sql) . 它将允许您按所有者和父或子表搜索并显示外键关系 . 当前脚本显式假脱机到C:\ SQLRPTS,因此您需要创建与您要使用的行相关的更改文件夹 .
这将传递给定表和列的外键层次结构,并从子孙和所有后代表返回列 . 它使用子查询将r_table_name和r_column_name添加到user_constraints,然后使用它们来连接行 .
这是另一种解决方案 . 使用sys的默认视图非常慢(在我的情况下大约10秒) . 这比这快得多(约0.5秒) .
如果需要用户的所有外键,请使用以下脚本
基于Vincent Malgrat代码
我知道现在回答有点迟,但无论如何我都要回答,上面的一些答案非常复杂,因此这里更简单 .
如果想要从UAT环境表创建FK约束到Live,请在动态查询下面激活.....
以我的拙见,我的版本更具可读性:
它对anwser来说有点晚了,但我希望我的回答对需要选择Composite外键的人有用 .
我使用下面的代码,它符合我的目的 -
对于Load UserTable(外键列表及其引用的表)