Системные таблицы InterBase - Представления (Views)

ОГЛАВЛЕНИЕ


Представления (Views)

Представления помогают нам организовать доступ к информации, находящейся в одной или нескольких таблицах. Особенно это удобно, когда такую информацию нужно получать часто, а условия отбора остаются неизменными. Можно ли узнать, какие представления есть в базе данных? Они перечислены в таблице RDB$RELATIONS вместе с таблицами. Попробуем их получить следующим SQL-запросом.

  select rdb$relation_name
from rdb$relations
where (rdb$system_flag = 0) and rdb$view_source is not null;

В условии отбора мы указали, что нас интересуют только объекты, созданные пользователем (rdb$system_flag = 0), и имеют заполненное поле rdb$view_source, что говорит о том, что мы имеем дело с представлением.

Известно, что представления строятся на базе SQL-запросов. Попробуем получить текст этого запроса для некоторого представления.

  select rdb$view_source
from rdb$relations
where rdb$relation_name = "PHONE_LIST";

Поле rdb$view_source имеет тип MEMO, и в нем содержится текст SQL.

Запрос, полностью идентичный запросу для таблиц, показывает структуру представления (возвращаемые поля, их тип и пр.).

   SELECT A.RDB$FIELD_NAME, A.RDB$FIELD_POSITION, A.RDB$NULL_FLAG,
A.RDB$FIELD_SOURCE, A.RDB$DEFAULT_SOURCE,
B.RDB$COMPUTED_SOURCE, B.RDB$FIELD_LENGTH,
B.RDB$FIELD_SCALE, B.RDB$FIELD_TYPE, B.RDB$FIELD_SUB_TYPE
FROM RDB$RELATION_FIELDS A, RDB$FIELDS B
WHERE A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME AND A.RDB$RELATION_NAME = "PHONE_LIST"
ORDER BY A.RDB$FIELD_POSITION ASC;