我打算从表中删除的数据,我想知道的表有多少和有外键参照甲骨文这个特定的表.因为我必须将外键设置为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)
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
.
下面的查询将给出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)
归档时间: |
|
查看次数: |
61875 次 |
最近记录: |