我有一个大约 50 个表的 Oracle-DB。
现在,我正在寻找所有具有表“xyz”外键的表。有没有办法做到这一点?
问候,莉亚
外键引用主(或唯一)键,而不是表。所以首先要做的是为 XYZ 建立主键。然后我们可以查找引用它的外键。
select p.constraint_name
, p.constraint_type
, f.owner
, f.table_name
, f.constraint_name
from all_constraints p
left join all_constraints f
on ( f.r_constraint_name = p.constraint_name)
where p.table_name = 'XYZ'
and p.constraint_type in ('P', 'U')
and f.constraint_type = 'R'
我已将其作为 OUTER JOIN 完成,因此即使没有表引用 XYZ 上的键,它也会返回一些内容。您的表可能会被其他模式中的表引用。这就是为什么我建议使用 ALL_CONSTRAINTS 而不是 USER_CONSTRAINTS。
select fk.table_name from all_constraints fk , all_constraints pk
where
pk.table_name = 'XYZ'
and fk.constraint_type = 'R'
and fk.r_constraint_name = pk.constraint_name
看来,您可以查询 User_Constraints 视图,例如
select distinct Table_Name
from User_Constraints
where Constraint_Type = 'R' and
R_Constraint_Name in (
select Constraint_Name
from User_Constraints
where Constraint_Type = 'P' and
Table_Name = Upper('xyz')) -- <- Your table name
order by Table_Name -- <- may be redundant
对于 sql 试试这个:
选择 K.TABLE_NAME , K.COLUMN_NAME , K.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K ON C.TABLE_NAME = K.TABLE_NAME 和 C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 和 C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME WHERE C.CONSTRAINT_TYPE = 'FOREIGN KEY' /*For FOREIGN KEY U NEED TO REPLACE CONSTRAINT_TYPE with FOREIGN KEY*/ AND K.COLUMN_NAME IN ( SELECT COLUMN_NAME 来自 INFORMATION_SCHEMA.COLUMNS )