список Как я могу найти, какие таблицы ссылаются на данную таблицу в Oracle SQL Developer?



oracle связи между таблицами (6)

В Oracle SQL Developer , если я просматриваю информацию в таблице, я могу просмотреть ограничения, которые позволяют мне видеть внешние ключи (и, следовательно, какие таблицы ссылаются на эту таблицу), и я могу просмотреть зависимости, чтобы увидеть, что пакеты и такая ссылка на таблицу. Но я не уверен, как найти, какие таблицы ссылаются на таблицу.

Например, скажем, я смотрю на таблицу emp . Существует еще одна таблица emp_dept которая фиксирует, какие сотрудники работают в тех подразделениях, которые ссылаются на таблицу emp через emp_id , первичный ключ таблицы emp . Есть ли способ (через некоторый элемент пользовательского интерфейса в программе, а не через SQL) обнаружить, что таблица emp_dept ссылается на таблицу emp , не имея мне знать, что существует таблица emp_dept ?


Answer #1

Нет. В Oracle SQL Developer такой возможности нет.

Вы должны выполнить запрос вручную или использовать другой инструмент (например, у PLSQL Developer есть такая опция). Следующий SQL - это тот, который используется разработчиком PLSQL:

select table_name, constraint_name, status, owner
from all_constraints
where r_owner = :r_owner
and constraint_type = 'R'
and r_constraint_name in
 (
   select constraint_name from all_constraints
   where constraint_type in ('P', 'U')
   and table_name = :r_table_name
   and owner = :r_owner
 )
order by table_name, constraint_name

Где r_owner - это схема, а r_table_name - таблица, для которой вы ищете ссылки. Имена чувствительны к регистру

Будьте внимательны, потому что на вкладке отчетов Oracle SQL Developer есть опция «Все таблицы / зависимости» от ALL_DEPENDENCIES которая ссылается на « зависимости между процедурами, пакетами, функциями, курьерскими органами и триггерами, доступными для текущего пользователя, включая зависимости на представления, созданные без ссылок на базы данных ". , Тогда этот отчет не имеет значения для вашего вопроса.


Answer #2
SELECT DISTINCT table_name, 
                constraint_name, 
                column_name, 
                r_table_name, 
                position, 
                constraint_type 
FROM   (SELECT uc.table_name, 
               uc.constraint_name, 
               cols.column_name, 
               (SELECT table_name 
                FROM   user_constraints 
                WHERE  constraint_name = uc.r_constraint_name) r_table_name, 
               (SELECT column_name 
                FROM   user_cons_columns 
                WHERE  constraint_name = uc.r_constraint_name 
                       AND position = cols.position)           r_column_name, 
               cols.position, 
               uc.constraint_type 
        FROM   user_constraints uc 
               inner join user_cons_columns cols 
                       ON uc.constraint_name = cols.constraint_name 
        WHERE  constraint_type != 'C') 
START WITH table_name = '&&tableName' 
           AND column_name = '&&columnName' 
CONNECT BY NOCYCLE PRIOR table_name = r_table_name 
                         AND PRIOR column_name = r_column_name; 

Answer #3

Вы можете запросить это из представления ALL_CONSTRAINTS :

SELECT table_name
FROM ALL_CONSTRAINTS
WHERE constraint_type = 'R' -- "Referential integrity"
  AND r_constraint_name IN
    ( SELECT constraint_name
      FROM ALL_CONSTRAINTS
      WHERE table_name = 'EMP'
        AND constraint_type IN ('U', 'P') -- "Unique" or "Primary key"
    );

Answer #4

Как насчет чего-то вроде этого:

SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name
  FROM dba_constraints c JOIN dba_constraints c2 ON (c.r_constraint_name = c2.constraint_name)
 WHERE c.table_name = <TABLE_OF_INTEREST>
   AND c.constraint_TYPE = 'R';

Answer #5

Замените [TABLE] на emp в запросе ниже

select owner,constraint_name,constraint_type,table_name,r_owner,r_constraint_name
  from all_constraints 
 where constraint_type='R'
   and r_constraint_name in (select constraint_name 
                               from all_constraints 
                              where constraint_type in ('P','U') 
                                and table_name='[YOUR TABLE]');

Answer #6

SQL Developer 4.1, выпущенный в мае 2015 года, добавил вкладку «Модель», в которой отображаются внешние ключи таблицы, которые относятся к вашей таблице в формате диаграммы сущностей.





oracle-sqldeveloper