ORACLE SQL получает все столбцы целевой таблицы, где исходная таблица указана как FK - PullRequest
0 голосов
/ 28 марта 2019

Использование: Oracle SQL Developer

Привет, я пытаюсь объяснить мою проблему на простом примере: enter image description here

Мне нужен Oracle SQL Query, который возвращает мне все столбцы, связанные с внешним ключом, из всех дочерних таблиц (Table Employee и Table Building), которые ссылаются на родительскую таблицу Table Organizational unit

Результат для моего примера будет выглядеть так:

ВЫБРАТЬ Все КОЛОННЫ всех таблиц, в которых есть запись, указанная в качестве внешнего ключа для таблицы Table Organizational unit ГДЕ 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. Теперь я также хочу запрос, который выбирает мне все строки во всех таблицах, где совпадает внешний ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...