Заметки о системных таблицах InterBase

Зависимости.


Представьте себе такую картину: Вы создали таблицу, у нее есть какие-то поля. Потом Вы создали представление, которое выбирает из этой таблицы некоторые поля. И вот у Вас возникла необходимость удалить таблицу или некоторые ее поля. Что будет с представлением. Скорее оно работать не будет. Чтобы подобных ситуаций не происходило, InterBase-сервер отслеживает зависимости между объектами в базе данных и хранит их в служебной таблице RDB$DEPENDENCIES. Описание полей этой таблицы можно найти в документации, а тут я попробую привести примеры запросов, которые позволят посмотреть, какой объект от какого зависит.

select distinct a.RDB$DEPENDENT_NAME, a.RDB$DEPENDENT_TYPE, b.RDB$TYPE_NAME from RDB$DEPENDENCIES a, RDB$TYPES b where (a.RDB$DEPENDENT_TYPE=b.RDB$TYPE) and (b.RDB$FIELD_NAME="RDB$OBJECT_TYPE") and (a.RDB$DEPENDED_ON_NAME = "JOB");

Приведенный выше запрос показывает, какие объекты зависят от объекта JOB. a.RDB$DEPENDENT_NAME - наименование объекта, который зависит от JOB, a.RDB$DEPENDENT_TYPE - тип этого объекта (код), b.RDB$TYPE_NAME - расшифровка типа объекта (представление, процедура и пр.).

А приведенный ниже запрос показывает, от каких объектов зависит объект "PHONE_LIST".

select a.RDB$DEPENDED_ON_NAME, a.RDB$FIELD_NAME, a.RDB$DEPENDED_ON_TYPE, b.RDB$TYPE_NAME from RDB$DEPENDENCIES a, RDB$TYPES b where (a.RDB$DEPENDED_ON_TYPE=b.RDB$TYPE) and (b.RDB$FIELD_NAME="RDB$OBJECT_TYPE") and a.RDB$DEPENDENT_NAME="PHONE_LIST";

a.RDB$DEPENDED_ON_NAME - наименование объекта, который используется при работе PHONE_LIST. a.RDB$FIELD_NAME - имена полей вышеупомянутых объектов, которые используются объектом PHONE_LIST. Далее, как и в предыдущем запросе, возвращается тип объекта, содержащегося в a.RDB$DEPENDED_ON_NAME.



Содержание раздела