SQL. Найти всю информацию по связанным таблицам

Задача:

Проверить и найти все таблицы, где используется определенное значение из связанной таблицы. Т.е. есть документы, справочники, которые содержат конкретное значение из связанного справочника.

Решение для СУБД Oracle:

Узнаем все таблицы, в которых есть необходимое нам поле:
select * from dba_tab_columns where column_name like '%LAWACT_ID';

Далее, пишем запрос по каждой таблице:
select TABLE_NAME AS "ТАБЛИЦА",
   COLUMN_NAME AS "КОЛОНКА",
   'SELECT '''||TABLE_NAME||''''||' AS "Таблица", 
   count(1) AS "Количество" FROM '||TABLE_NAME||' WHERE '||COLUMN_NAME||' = <необходимый ID> UNION ALL' AS "СКРИПТ"
  from dba_tab_columns
 where column_name like 'KD_CODE' /*Укажите название поля (колонки) */
 --AND OWNER like '<schema_name>'; /*Укажите схему */

Далее, копируем значение из колонки "СКРИПТ", редактируем его, убирая UNION ALL в последней строке. В результате получим:

Таблица         |Количество|
----------------|----------|
AGREEMENT_LAWACT|         0|
AGREEMENT_LAWACT|         0|
BACKORDER       |         0|
BUDGORDER       |         0|


Аналогичное решение для СУБД Firebird:

SELECT rdb$relation_name AS "Таблица",
rdb$field_name AS "Колонка",
'SELECT '''||TRIM(rdb$relation_name)||''''||' AS "Таблица", count(1) AS "Количество" FROM '||
TRIM(rdb$relation_name)||' WHERE '||TRIM(rdb$field_name)||' = <необходимый ID> UNION ALL' AS "СКРИПТ"
   from rdb$relation_fields
  where rdb$field_name like '%ORGACCOUNT_ID%' /*Укажите название поля (колонки) */
--AND rdb$relation_name like '<table name>'; /*Укажите таблицу */

Комментарии

Популярные сообщения из этого блога

Linux (РедОС). Сброс пароля

TRUNCATE / DELETE / DROP или как очистить таблицу

КБК. КВФО - Код вида финансового обеспечения (деятельности)

SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction

РедОС. Подключение к сетевой папке