Как я могу найти, какие таблицы ссылаются на данную таблицу в Oracle SQL Developer?
на Oracle SQL Developer, если я просматриваю информацию в таблице, я могу просмотреть ограничения, которые позволяют мне видеть внешние ключи (и, следовательно, какие таблицы ссылаются на эту таблицу), и я могу просмотреть зависимости, чтобы увидеть, какие пакеты и такие ссылки на таблицу. Но я не уверен, как найти, какие таблицы ссылаются на таблицу.
например, скажем, я смотрю на emp
таблица. Есть еще одна таблица emp_dept
который захватывает, какие сотрудники работают в каких отделах, какие ссылки emp
в таблице emp_id
первичный ключ emp
таблица. Есть ли способ (через какой-то элемент пользовательского интерфейса в программе, а не через SQL) найти, что emp_dept
таблица ссылок emp
таблица, без меня, чтобы знать, что таблицы?
7 ответов:
нет. В Oracle SQL Developer такая опция недоступна.
вы должны выполнить запрос вручную или использовать другой инструмент (к примеру PLSQL разработчик есть такая опция). Следующий 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 Разработчик есть опция "Все таблицы / зависимости" это от ALL_DEPENDENCIES что означает "зависимости между процедурами, пакетами, функциями, телами пакетов и триггерами, доступными текущему пользователю, включая зависимости от представлений, созданных без ссылок на базы данных.". Тогда этот отчет не имеет никакого значения для вашего вопроса.
чтобы добавить это в SQL Developer в качестве расширения, выполните следующие действия:
- сохраните приведенный ниже код в xml-файл (например, fk_ref.xml):
<items> <item type="editor" node="TableNode" vertical="true"> <title><![CDATA[FK References]]></title> <query> <sql> <![CDATA[select a.owner, a.table_name, a.constraint_name, a.status from all_constraints a where a.constraint_type = 'R' and exists( select 1 from all_constraints where constraint_name=a.r_constraint_name and constraint_type in ('P', 'U') and table_name = :OBJECT_NAME and owner = :OBJECT_OWNER) order by table_name, constraint_name]]> </sql> </query> </item> </items>
добавить расширение в SQL Developer:
- Инструменты > Предпочтения
- База Данных > Пользовательские Расширения
- Нажмите кнопку" добавить строку"
- в типе выберите "редактор", место, где вы сохранили xml-файл выше
- Нажмите Кнопку " ОК" затем перезапустите SQL Developer
перейдите к любой таблице, и теперь вы должны увидеть дополнительную вкладку рядом с SQL one, помеченную ссылками FK, которая отображает новую информацию FK.
ссылка
замените [вашу таблицу] на 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]');
вы можете запросить это из
ALL_CONSTRAINTS
view: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" );
SQL Developer 4.1, выпущенный в мае 2015 года, добавил вкладку Model, которая показывает внешние ключи таблицы, которые ссылаются на вашу таблицу в формате диаграммы отношений сущностей.
Как насчет чего-то вроде этого:
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';
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;