首页 > 解决方案 > ORACLE SQL 获取源表作为 FK 引用的所有目标表列

问题描述

使用:Oracle SQL 开发人员

嗨,我尝试用一​​个简单的例子来解释我的问题: 在此处输入图像描述

我需要一个 Oracle SQL 查询,它从引用父表的所有子表(Table Employee和)中返回所有与外键相关的列Table BuildingTable Organizational unit

我的示例的结果如下所示:

选择所有表的所有列,这些表有一个条目被引用为表Table Organizational unit WHERE的外键Table Organizational unit.Code = 'HR'

--Result

Table Building
ID , ORG_UNIT_REF,  Building Type
152, 2           ,   Main Building

Table Employee
ID,  ORG_UNIT_REF,  Employee Name
13,  2           ,  Max Doe

这意味着所有的表及其表名、列名和匹配的列内容都必须打印出来。

我已经使用这个答案找到了所有的引用表和约束名称

SELECT a.table_name, a.column_name, a.constraint_name, c.owner, 
       -- referenced pk
       c.r_owner, c_pk.table_name r_table_name, c_pk.constraint_name r_pk
  FROM all_cons_columns a
  JOIN all_constraints c ON a.owner = c.owner
                        AND a.constraint_name = c.constraint_name
  JOIN all_constraints c_pk ON c.r_owner = c_pk.owner
                           AND c.r_constraint_name = c_pk.constraint_name
 WHERE c.constraint_type = 'R'
   AND a.table_name = :TableName

对于我的示例,上面的查询给了我类似的东西:

"TABLE_NAME","CONSTRAINT_NAME","STATUS","OWNER"
"Table Employee","FK_CONSTRAINT","ENABLED","TESTSCHEMA"
"Table Building","FK_CONST","ENABLED","TESTSCHEMA"

现在我知道所有引用我的父表的子表Organizational unit。现在我想要一个查询,它可以获取外键匹配的所有表中的所有行。

标签: sqloracle

解决方案


推荐阅读