ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ ТАБЛИЦ БАЗЫ ДАННЫХ

ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ  ТАБЛИЦ БАЗЫ ДАННЫХ
SELECT F.RDB$RELATION_NAME, F.RDB$CONSTRAINT_NAME,
       T.RDB$RELATION_NAME, T.RDB$CONSTRAINT_NAME,
FROM RDB$REF_CONSTRAINTS C, RDB$RELATION_CONSTRAINTS F, RDB$RELATION_CONSTRAINTS T
WHERE C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME AND
      T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ AND
      UPPER(F.RDB$CONSTRAINT_NAME) LIKE UPPER('%KCSR%')
ORDER BY F.RDB$RELATION_NAME, T.RDB$RELATION_NAME;


Смысл этого запроса следующий: таблица RDB$RELATION_CONSTRAINTS содержит все имена constraints, включая первичные и вторичные ключи. Таблица RDB$REF_CONSTRAINTS содержит список всех вторичных ключей. Задача – вытащить имена таблиц и имена ссылающихся на них таблиц, при помощи двукратного обращения к RDB$RELATION_CONSTRAINTS (алиасы F и T, from и to соответственно). В результате получаем четыре столбца:
  • F.RDB$RELATION_NAME   - имя таблицы, которая ссылается на другую при помощи foreign key
  • F.RDB$CONSTRAINT_NAME - имя соответствующего foreign key
  • T.RDB$RELATION_NAME   - имя таблицы, на которую ссылаются (используется как справочник)
  • F.RDB$CONSTRAINT_NAME - имя primary key constraint таблицы T.RDB$RELATION_NAME
Второй и четвертый столбцы чисто информативные. Order by – для красоты. Запрос такого типа можно использовать как для организации механизма репликации, так и для создания программ копирования данных из одной базы данных в другую.


Поиск + необходимый селект по строкам:
SELECT F.RDB$RELATION_NAME, F.RDB$CONSTRAINT_NAME,
       T.RDB$RELATION_NAME, T.RDB$CONSTRAINT_NAME,
       'select * from '||F.RDB$RELATION_NAME||' where kcsr_code like upper (''%A%'')'
FROM RDB$REF_CONSTRAINTS C, RDB$RELATION_CONSTRAINTS F, RDB$RELATION_CONSTRAINTS T
WHERE C.RDB$CONSTRAINT_NAME = F.RDB$CONSTRAINT_NAME AND
      T.RDB$CONSTRAINT_NAME = C.RDB$CONST_NAME_UQ AND
      UPPER(F.RDB$CONSTRAINT_NAME) LIKE UPPER('%KCSR%')
ORDER BY F.RDB$RELATION_NAME, T.RDB$RELATION_NAME;

Комментарии

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

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

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

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

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

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