Создание представления

Функция

Определение представления.

Спецификация
   
< создание представления >::=
CREATE [IF NOT EXISTS | OR REPLACE] [MATERIALIZED]
VIEW [имя схемы.] имя представления
[(имя столбца [, …])] AS запрос выборки
[WITH [CASCADED | LOCAL] CHECK OPTION]
< имя представления >::=
Синтаксические правила
  1. < Имя представления > должно быть уникальным среди имен таблиц, представлений и их синонимов в рамках < имя схемы > или текущей схемы, при отсутствии < имя схемы >.

  2. Опция OR REPLACE заставляет удалять существующее в БД представление и создавать его под тем же именем, но с указанными параметрами.

  3. Опция IF NOT EXISTS отменяет выполнение оператора, если указанное представление уже существует в БД.

  4. Одновременное использование опций IF NOT EXISTS и OR REPLACE запрещено.

  5. Опция MATERIALIZED заставляет создавать «материализованное» представление.

  6. Если < запрос выборки > обновляемый, то и представление считается обновляемой таблицей. В противном случае – это считываемая таблица.

  7. При отсутствии спецификации столбцов представления они получат имена столбцов из < запроса выборки >. Если некоторые столбцы < запроса выборки > имеют одинаковое имя или считаются неименованными, то список имен столбцов представления должен быть задан.

    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 |
    …
  8. Имена в списке (< имя столбца >[, …]) должны быть уникальны.

  9. Число столбцов в списке (< имя столбца >[, …]) должно быть равно количеству столбцов в < запросе выборки >.

    CREATE VIEW Black_Auto(PersonID,Make,Model,SerialNo) AS
    SELECT PersonID,Make,Model,SerialNo
      FROM Auto WHERE Color ='BLACK';
  10. Разрешено опускать явное преобразование типа при выборке 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
    …
  11. Если указано WITH CHECK OPTION, то таблица представления должна быть обновляемой.

Общие правила
  1. Представление – это таблица-результат выполнения < запроса выборки >. Указанный < запрос выборки > выполняется СУБД каждый раз при обработке SQL-запроса, содержащего ссылку на представление.

  2. При создании материализованного представления создаётся специальная таблица (спецтаблица). Типы, имена и количество столбцов спецтаблицы совпадают с типами, именами и количеством столбцов представления. При необходимости извлечения данных материализованного представления запрос к представлению переадресуется к спецтаблице (на уровне трансляции SQL-запроса).

  3. Внутренний SQL-запрос для загрузки данных из спецтаблицы (select * from < имя схемы >.< имя материализованного представления >) выполняется СУБД под именем и с правами пользователя – владельца представления.

  4. Для материализованных представлений разрешено создание простых и составных индексов (индексы создаются для спецтаблиц).

    Примечание

    В текущей версии СУБД ЛИНТЕР фразовые индексы для материализованных представлений не поддерживаются.

  5. В случае модификации/удаления какого-либо объекта или модификации данных (добавление, удаление, модификация записей) какого-либо объекта, на основе которого создано одно или несколько материализованных представлений, все такие представления помечаются как «представления с изменёнными данными». Обновление этих представлений выполняется СУБД ЛИНТЕР автоматически при первом после изменения данных обращении к ним.

  6. В материализованных представлениях недопустимо использование конструкций SYSDATE, NOW, CURRENT_TIMESTAMP, USER, LINTER_USER_ID, SEQUENCE (CURRVAL, NEXTVAL), LAST_AUTOINC, LAST_ROWID. В этом случае будет возвращён код завершения 2281 «Недопустимое выражение для материализованного представления».

  7. Если представление обновляемое, то для каждой строки этого представления есть соответствующая строка базовой таблицы, порождающая строку представления. Для каждого столбца в представлении есть соответствующий порождающий столбец в базовой таблице. Вставка/удаление/изменение строки в представлении есть вставка/удаление/изменение соответствующей строки в базовой таблице. В данной ситуации возможны следующие случаи:

    • если указана опция WITH CHECK OPTION и < запрос выборки > содержит < WHERE-спецификацию >, то информация, вносимая в представление при добавлении/изменении, будет проверяться на соответствие < WHERE-спецификации >;

    • если опция WITH CHECK OPTION не указана, то обновление такого представления не вносит ограничений на значения добавляемых данных;

    • для представления с опцией CHECK OPTION разрешена операция UPDATE CURRENT OF.

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