1

我有一个大约 50 个表的 Oracle-DB。

现在,我正在寻找所有具有表“xyz”外键的表。有没有办法做到这一点?

问候,莉亚

4

4 回答 4

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。

于 2013-07-15T12:41:37.900 回答
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
于 2013-07-15T12:44:31.547 回答
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
于 2013-07-15T13:03:35.180 回答
0

对于 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 )


于 2013-07-15T13:04:38.223 回答