我有一个带有~50个表的Oracle-DB。
现在,我正在寻找带有'xyz'外键的所有表。 有没有办法做到这一点?
问候, 莉娅
答案 0 :(得分:3)
外键引用主键(或唯一键),而不是表。首先要建立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。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
看来,您可以查询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
答案 3 :(得分:0)
for sql试试这个:
SELECT 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 AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG AND 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 FROM INFORMATION_SCHEMA.COLUMNS )