WITH CHECK option

AS

AS

AS

SELECT EMPID, LASTNAME, SALARY + BONUS + COMM AS COMMON_PAY

FROM EMPLOYEE

и

CREATE VIEW V1 (EMPID, LASTNAME, COMMON_PAY)

SELECT EMPID, LASTNAME, SALARY + BONUS + COMM

FROM EMPLOYEE

Запрос определяет получаемое представление и может быть представлен в виде одного запроса или нескольких запросов, объединенных операцией UNION ALL (из теоретико-множественных операций при определении представления допускается использование только операции UNION ALL). В каждый момент при обращении к представлению оно содержит строки, получаемые при выполнении запроса.

Представления создаются на основе таблиц, других представлений или соединении таблиц с другими таблицами и/или представлениями. Определим таблицы и представления, на основе которых создается представление, как базовые.

Представления могут быть определены как не модифицируемые (read-only) или модифицируемые.

Представления являются не модифицируемыми, если справедливо хотя бы одно из следующих условий:

• первая конструкция FROM в определении представления содержит более одного имени таблицы или представления, т.е. представление соединяет несколько таблиц и/или представлений;

• в первой конструкции SELECT указано ключевое слово DISTINCT, т.е. в представление включается только одна из нескольких одинаковых строк;

• в первой конструкции SELECT в списке выбора указана агрегатная функция, т.е. колонка логической таблицы, описанной представлением, создается с помощью агрегатной функции.

• внешний подзапрос содержит конструкцию GROUP BY, т.е. строки логической таблицы, описанной представлением, могут быть получены из нескольких строк базовой таблицы или представления, а не из одной строки.

• представление содержит подзапрос, такой, что базовый объект внешнего запроса и подзапроса – одна и та же таблица. Это значит, что таблица или представление, из которых создаваемое представление извлекает данные, также используются для определения строк, которые должны быть выбраны;

• в первой конструкции FROM указано не модифицируемое представление, т.е. представление строится на основе read-only представления.

Не модифицируемое представление не может быть объектом в предложениях INSERT, DELETE, UPDATE. Модифицируемое представление может указываться в предложениях DELETE, INSERT и UPDATE. В этом случае соответствующая операция выполняется с базовой таблицей, на которой определено представление.

Конструкция WITH CHECK OPTION может быть указана только для модифицируемых представлений. В этом случае каждая вставляемая или обновляемая с помощью представления строка должна удовлетворять определению представления, т.е. для нее должны выполняться все условия отбора, указанные в определении представления в конструкциях WHERE. Если данная конструкция опущена, условия, указанные в определении представления проверяться не будут.

Например, пусть имеется таблица T1 с колонками TId типа INT и TName типа VARCHAR(20), и для нее определено следующее представление:

CREATE VIEW V1

SELECT * FROM T1 WHERE TName LIKE 'A%'

Выполняются следующие два предложения:

INSERT INTO V1 VALUES(12, 'ABC')

и

INSERT INTO V1 VALUES(12, 'BCC')

В этом случае первое предложение будет выполнено успешно, и в таблицу T1 будет вставлена новая строка, тогда как второе предложение завершится с ошибкой, и новые данные в таблицу Т1 вставлены не будут.

Если же представление V1 для данной таблицы будет определено без указания WITH CHECK OPTION:

CREATE VIEW V1


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: