InterBase - статьи


Псевдонимы типов (Домены) - часть 2


Предыдущий запрос выдавал информацию обо всех доменах базы данных. Чаще всего бывает интересно проанализировать пользовательские домены. Следующий пример запроса выдает наиболее интересную информацию только о доменах, созданных пользователем.

SELECT RDB$FIELDS.RDB$FIELD_NAME, RDB$FIELDS.RDB$COMPUTED_SOURCE, RDB$FIELDS.RDB$DEFAULT_SOURCE, RDB$FIELDS.RDB$FIELD_LENGTH, RDB$FIELDS.RDB$FIELD_SCALE, RDB$FIELDS.RDB$FIELD_TYPE, RDB$FIELDS.RDB$FIELD_SUB_TYPE, RDB$FIELDS.RDB$DESCRIPTION, RDB$FIELDS.RDB$SYSTEM_FLAG, RDB$FIELDS.RDB$DIMENSIONS, RDB$FIELDS.RDB$NULL_FLAG, RDB$FIELDS.RDB$CHARACTER_LENGTH, RDB$FIELDS.RDB$COLLATION_ID, RDB$FIELDS.RDB$CHARACTER_SET_ID, RDB$FIELDS.RDB$FIELD_PRECISION FROM RDB$FIELDS WHERE (RDB$FIELDS.RDB$SYSTEM_FLAG = 0);

Некоторые параметры (на пример тип) представлены в виде кодов. У этих кодов есть расшифровка, которая содержится в таблице RDB$TYPES. Вот пример, который позволяет посмотреть текстовое описание типа домена.

SELECT RDB$FIELDS.RDB$FIELD_NAME, RDB$FIELDS.RDB$COMPUTED_SOURCE, RDB$FIELDS.RDB$DEFAULT_SOURCE, RDB$FIELDS.RDB$FIELD_LENGTH, RDB$FIELDS.RDB$FIELD_SCALE, RDB$FIELDS.RDB$FIELD_TYPE, RDB$TYPES.RDB$TYPE_NAME, RDB$FIELDS.RDB$FIELD_SUB_TYPE, RDB$FIELDS.RDB$DESCRIPTION, RDB$FIELDS.RDB$SYSTEM_FLAG, RDB$FIELDS.RDB$DIMENSIONS, RDB$FIELDS.RDB$NULL_FLAG, RDB$FIELDS.RDB$CHARACTER_LENGTH, RDB$FIELDS.RDB$COLLATION_ID, RDB$FIELDS.RDB$CHARACTER_SET_ID, RDB$FIELDS.RDB$FIELD_PRECISION FROM RDB$FIELDS LEFT OUTER JOIN RDB$TYPES ON (RDB$FIELDS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ((RDB$FIELDS.RDB$SYSTEM_FLAG = 0) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'));

В полях базы данных InterBase могут храниться массивы, соответственно можно определить домен, который будет содержать информацию о массиве. Следующий запрос выбирает именно такие домены и выдает информацию о размерности и границах массива. Информация о размерности массива содержится в таблице RDB$FIELD_DIMENSIONS.

SELECT RDB$FIELDS.RDB$FIELD_NAME, RDB$FIELDS.RDB$COMPUTED_SOURCE, RDB$FIELDS.RDB$DEFAULT_SOURCE, RDB$FIELDS.RDB$FIELD_LENGTH, RDB$FIELDS.RDB$FIELD_SCALE, RDB$FIELDS.RDB$FIELD_TYPE, RDB$TYPES.RDB$TYPE_NAME, RDB$FIELDS.RDB$FIELD_SUB_TYPE, RDB$FIELDS.RDB$DESCRIPTION, RDB$FIELDS.RDB$DIMENSIONS, RDB$FIELD_DIMENSIONS.RDB$DIMENSION, RDB$FIELD_DIMENSIONS.RDB$LOWER_BOUND, RDB$FIELD_DIMENSIONS.RDB$UPPER_BOUND FROM RDB$FIELDS INNER JOIN RDB$FIELD_DIMENSIONS ON (RDB$FIELDS.RDB$FIELD_NAME = RDB$FIELD_DIMENSIONS.RDB$FIELD_NAME) LEFT OUTER JOIN RDB$TYPES ON (RDB$FIELDS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ((RDB$FIELDS.RDB$SYSTEM_FLAG = 0) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'));




- Начало -  - Назад -  - Вперед -