ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ ТАБЛИЦ БАЗЫ ДАННЫХ
ПОЛУЧЕНИЕ СПИСКА СВЯЗАННЫХ ТАБЛИЦ БАЗЫ ДАННЫХ
Поиск + необходимый селект по строкам:
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;
Комментарии
Отправить комментарий