如何知道其他表中引用的父表列

时间:2019-02-04 08:00:43

标签: database oracle plsql oracle11g

假设我有表A,B,C,D等。

表A中现在有一个名为id_event的列。我的数据库架构包含许多表,以至于我很难找出在其他表中使用了id_event列的位置。

您能提供给我任何可以帮助我解决此问题的查询或技术吗?

注意:我正在使用Oracle Database 11g企业版11.2.0.4.0版-64位生产版本

1 个答案:

答案 0 :(得分:2)

一种快速的选择是查询USER_TAB_COLUMNS,其中包含架构中的所有列以及它所属的表:

SELECT table_name
  FROM user_tab_columns
 WHERE column_name = 'ID_EVENT';

另一个选择:如果您注意自己所做的事情并创建了一个 good 模式,那么您已经创建了主键,外键约束和内容,则可以查询USER_CONSTRAINTSUSER_CONS_COLUMNS以获取您感兴趣的信息。现在,您知道要查找的位置,可以随时修改此查询(或编写您自己的查询)。总体思路是检查R约束类型(参照完整性)。

SELECT n.constraint_name,
       n.table_name,
       n.r_constraint_name,
       r.table_name referenced_table_name,
       c.column_name,
       c.table_name,
       c1.column_name
  FROM user_constraints n
       JOIN user_constraints r ON n.r_constraint_name = r.constraint_name
       JOIN user_cons_columns c ON c.constraint_name = r.constraint_name
       JOIN user_cons_columns c1 ON c1.constraint_name = n.constraint_name
 WHERE     n.constraint_type = 'R'
       AND c.column_name = 'ID_EVENT';