如何在Oracle中查找具有外键的表的表?

Wal*_*ker 10 oracle key

我打算从表中删除的数据,我想知道的表有多少和有外键参照甲骨文这个特定的表.因为我必须将外键设置为null.我想知道所有具有此特定表的FK的表的列表.

kup*_*upa 12

SELECT d.table_name,

       d.constraint_name "Primary Constraint Name",

       b.constraint_name "Referenced Constraint Name"

FROM user_constraints d,

     (SELECT c.constraint_name,

             c.r_constraint_name,

             c.table_name

      FROM user_constraints c 

      WHERE table_name='EMPLOYEES' --your table name instead of EMPLOYEES

      AND constraint_type='R') b

WHERE d.constraint_name=b.r_constraint_name
Run Code Online (Sandbox Code Playgroud)

  • 我认为应该是,"引用约束名称",因为这是引用主要约束的约束的名称,而不是相反的方式. (2认同)

jpm*_*c26 10

SELECT
  FK.OWNER||'.'||FK.TABLE_NAME AS CHILD_TABLE,
  SRC.OWNER||'.'||SRC.TABLE_NAME AS PARENT_TABLE,
  FK.CONSTRAINT_NAME AS FK_CONSTRAINT,
  SRC.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT
FROM ALL_CONSTRAINTS FK
JOIN ALL_CONSTRAINTS SRC ON FK.R_CONSTRAINT_NAME = SRC.CONSTRAINT_NAME
WHERE
  FK.CONSTRAINT_TYPE = 'R'
  AND SRC.OWNER = 'MY_SCHEMA'
  AND SRC.TABLE_NAME = 'MY_TABLE';
Run Code Online (Sandbox Code Playgroud)

我有一种情况,我感兴趣的表不属于我连接的模式.所以我需要在当前接受的答案中修改查询ALL_CONSTRAINTS而不是使用USER_CONSTRAINTS.在这个过程中,我犯了一个错误,我发现接受的答案很难阅读,所以我可以解决它.(缺乏解释没有帮助.)结果,我最终得出了自己的查询.它基本相同,但我认为这更容易理解.

FK.CONSTRAINT_TYPE = 'R'过滤FK到一组外键约束,并且连接将这些外键与它们的"引用约束"配对.(引用的约束通常是"父"表的主键.)最后,我们过滤到我们感兴趣的父表SRC.OWNER = 'MY_SCHEMA' AND SRC.TABLE_NAME = 'MY_TABLE'.

当然,USER_CONSTRAINTS如果您愿意,可以将其切换使用; 只需删除SRC.OWNER支票和OWNER前缀SELECT.


nan*_*oft 6

下面的查询将给出TABLE_NAME上定义的所有外键约束:

select baseTable.* from all_constraints baseTable , all_constraints referentedTable 
    where baseTable.R_CONSTRAINT_NAME = referentedTable.CONSTRAINT_NAME
    and baseTable.constraint_type = 'R'
    and referentedTable.table_name = 'TABLE_NAME';
Run Code Online (Sandbox Code Playgroud)