Средства определения представлений
Представляемая таблица, или просто представление создается с помощью оператора CREATEVIEW, который похож на соответствующий оператор языка SQL/89, но обладает существенно расширенными возможностями. Для полноты мы опишем этот оператор достаточно подробно. Как обычно, начнем со сводки синтаксических правил:
<view definition> ::= CREATE VIEW <table name> [ <left paren> <view column list> <right paren> ] AS <query expression> [ WITH [ <levels clause> ] CHECK OPTION ] <levels clause> ::= CASCADED | LOCAL <view column list> ::= <column name list>
Пояснения:
Выражение запроса не должно содержать спецификацию цели или динамического параметра. Имя определяемого представления не должно содержаться в какой-либо ссылке на таблицу, содержащейся в выражении запроса (другими словами, не допускаются рекурсивные определения представлений). В выражении запросов не должны встречаться имена временных объявляемых таблиц. Если выражение запроса является обновляемым, то и определяемое представление является обновляемым. В противном случае представляемая таблица - только читаемая.
(a) выражение запроса является обновляемым в том и только в том случае, когда содержит только выражение запроса QE или спецификацию запроса QS и
(i) выражение запроса содержит QS или QS, не включающие выражение запроса без соединения с операторами UNION или EXCEPT;
(ii) выражение запроса содержит QE или QS, не включающие терм запроса без соединения с оператором INTERSECT;
(iii) QE или QS являются обновляемыми;
(b) спецификация запроса QS является обновляемой в том и только в том случае, когда
(i) в QS не специфицировано DISTINCT;
(ii) каждое выражение, содержащееся в списке выборки QS, состоит из ссылки на столбец, и ни одна ссылка на столбец не появляется более одного раза;
(iii) раздел FROM табличного выражения, непосредственно входящего в QS, содержит в точности одну ссылку на таблицу, указывающую на базовую таблицу или на обновляемую порождаемую таблицу;
(iv) таблица, на которую содержится ссылка в разделе FROM верхнего уровня, не должна использоваться в подзапросах, входящих в раздел FROM;
(v) табличное выражение, непосредственно содержащееся в QS, не должно включать разделы GROUPBY и HAVING;
(c) порождаемая таблица является обновляемой в том и только в том случае, когда обновляемым является выражение запроса, содержащееся в табличном подзапросе;
(d) соответствующие синтаксические правила и пояснения содержатся в разд. 3.3 (мы сознательно не говорили в этом разделе о правилах обновляемости, потому что они больше связаны с представлениями).
Число имен столбцов в списке столбцов представления должно совпадать со степенью таблицы, специфицированной выражением запроса. Если в определении представления содержится раздел WITHCHECKOPTION, то представление должно быть обновляемым. Если специфицировано WITHCHECKOPTION без задания раздела уровней (levelsclause), то по умолчанию полагается указание класса CASCADED. Если в определении представления специфицирован список столбцов представления, то i-тый столбец представления имеет i-тое имя из этого списка. В противном случае имена столбцов представления совпадают с именами столбцов таблицы, специфицируемой выражением запроса. Набор привилегий, которые получает создатель по отношению к определяемому представлению, определяется сравнительно громоздким набором правил и в конечном счете зависит от набора привилегий, которыми располагает создатель по отношению к базовым таблицам, лежащим в основе представления, и от того, является ли представление обновляемым. В соответствии с правилами обновляемости представления, для каждой строки обновляемого представления существует и только одна строка базовой таблицы, на которой в конечном счете основывается это представление. Занесение новой строки, удаление или модификация существующей строки приводит к выполнению соответствующей операции над строками этой базовой таблицы. Пусть V1 - представление. По определению V1 перекрывает (span) V1, и V1 перекрывает представление V2, если V2 используется в определении V1. Под операцией обновления понимаются операция INSERT и позиционная, поисковая, динамическая позиционная и подготавливаемая динамическая позиционная операции UPDATE. Если представление V1 перекрывает представление V2, в определении V2 содержался раздел WITHCHECKOPTION, и в результате выполнения операции обновления V1 возникает строка, невидимая в V2, то
(a) если в определении V1 было указано CASCADED, то вырабатывается исключительное условие;
(b) если в определении V1 было указано LOCAL и в результате выполнения операции обновления возникает строка, видимое в таблице, на которой непосредственно определено представление V2, то вырабатывается исключительное условие.
Проверка ограничения WITHCHECKOPTION выполняется в конце каждой операции обновления.
Содержание раздела