Создание представления
Функция
Определение представления.
Спецификация
::=
VIEW [имя схемы.] имя представления
[(имя столбца [, …])] AS запрос выборки
[WITH [CASCADED | LOCAL] CHECK OPTION]
::=
Синтаксические правила
-
< Имя представления >
должно быть уникальным среди имен таблиц, представлений и их синонимов в рамках< имя схемы >
или текущей схемы, при отсутствии< имя схемы >
. -
Опция
OR REPLACE
заставляет удалять существующее в БД представление и создавать его под тем же именем, но с указанными параметрами. -
Опция
IF NOT EXISTS
отменяет выполнение оператора, если указанное представление уже существует в БД. -
Одновременное использование опций
IF NOT EXISTS
иOR REPLACE
запрещено. -
Опция
MATERIALIZED
заставляет создавать «материализованное» представление. -
Если
< запрос выборки >
обновляемый, то и представление считается обновляемой таблицей. В противном случае – это считываемая таблица. -
При отсутствии спецификации столбцов представления они получат имена столбцов из
< запроса выборки >
. Если некоторые столбцы< запроса выборки >
имеют одинаковое имя или считаются неименованными, то список имен столбцов представления должен быть задан.CREATE VIEW Owner_Auto AS SELECT Name,FirstNam,SerialNo,Make,Model FROM Person P,Auto A WHERE P.PersonID=A.PersonID; select * from Owner_Auto; NAME FIRSTNAM SERIALNO MAKE MODEL |WAGNER |PHIL |J003180026998205 |ALPINE |A-310 | …
-
Имена в списке
(< имя столбца >[, …])
должны быть уникальны. -
Число столбцов в списке
(< имя столбца >[, …])
должно быть равно количеству столбцов в< запросе выборки >
.CREATE VIEW Black_Auto(PersonID,Make,Model,SerialNo) AS SELECT PersonID,Make,Model,SerialNo FROM Auto WHERE Color ='BLACK';
-
Разрешено опускать явное преобразование типа при выборке NULL-значения как столбца. По умолчанию тип данных создаваемого столбца будет int. Три нижеследующих конструкции эквивалентны:
create or replace view vtst (ID, N1, V1) as SELECT ID, cast(NULL as int), cast(NULL as int) FROM tst2; create or replace view vtst (ID, N1, V1) as SELECT ID, cast(NULL as int), NULL FROM tst2; create or replace view vtst (ID, N1, V1) as SELECT ID, NULL, NULL FROM tst2; sql > show vtst ID INTEGER N1 INTEGER V1 INTEGER …
-
Если указано
WITH CHECK OPTION
, то таблица представления должна быть обновляемой.
Общие правила
-
Представление – это таблица-результат выполнения
< запроса выборки >
. Указанный< запрос выборки >
выполняется СУБД каждый раз при обработке SQL-запроса, содержащего ссылку на представление. -
При создании материализованного представления создаётся специальная таблица (спецтаблица). Типы, имена и количество столбцов спецтаблицы совпадают с типами, именами и количеством столбцов представления. При необходимости извлечения данных материализованного представления запрос к представлению переадресуется к спецтаблице (на уровне трансляции SQL-запроса).
-
Внутренний SQL-запрос для загрузки данных из спецтаблицы (
select * from < имя схемы >.< имя материализованного представления >
) выполняется СУБД под именем и с правами пользователя – владельца представления. -
Для материализованных представлений разрешено создание простых и составных индексов (индексы создаются для спецтаблиц).
Примечание
В текущей версии СУБД ЛИНТЕР фразовые индексы для материализованных представлений не поддерживаются.
-
В случае модификации/удаления какого-либо объекта или модификации данных (добавление, удаление, модификация записей) какого-либо объекта, на основе которого создано одно или несколько материализованных представлений, все такие представления помечаются как «представления с изменёнными данными». Обновление этих представлений выполняется СУБД ЛИНТЕР автоматически при первом после изменения данных обращении к ним.
-
В материализованных представлениях недопустимо использование конструкций
SYSDATE
,NOW
,CURRENT_TIMESTAMP
,USER
,LINTER_USER_ID
,SEQUENCE
(CURRVAL
,NEXTVAL
),LAST_AUTOINC
,LAST_ROWID
. В этом случае будет возвращён код завершения 2281 «Недопустимое выражение для материализованного представления». -
Если представление обновляемое, то для каждой строки этого представления есть соответствующая строка базовой таблицы, порождающая строку представления. Для каждого столбца в представлении есть соответствующий порождающий столбец в базовой таблице. Вставка/удаление/изменение строки в представлении есть вставка/удаление/изменение соответствующей строки в базовой таблице. В данной ситуации возможны следующие случаи:
-
если указана опция
WITH CHECK OPTION
и< запрос выборки >
содержит< WHERE-спецификацию >
, то информация, вносимая в представление при добавлении/изменении, будет проверяться на соответствие< WHERE-спецификации >
; -
если опция
WITH CHECK OPTION
не указана, то обновление такого представления не вносит ограничений на значения добавляемых данных; -
для представления с опцией
CHECK OPTION
разрешена операцияUPDATE CURRENT OF
.
-
-
Если в представлении содержатся таблицы без указания имени схемы, то при выполнении запроса выборки представления будет использоваться схема владельца представления (а не пользователя, выполняющего запрос выборки из представления).