Создание представления (CREATE VIEW)
Функция
Определение представления.
Спецификация
::=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.
-
-
Если в представлении содержатся таблицы без указания имени схемы, то при выполнении запроса выборки представления будет использоваться схема владельца представления (а не пользователя, выполняющего запрос выборки из представления).