double arrow

CREATE VIEW (InterBase)


Опции CASCADED и LOCAL

Опция WITH CHECK OPTION

Опция WITH CHECK OPTION является опцией оператора CREATE VIEW. Эта опция применяется тогда, когда необходимо гарантировать, что все применяемые операторы UPDATE и INSERT удовлетворяют указанным в определении представления условиям. Если при этом указанные условия будут не удовлетворены, оператор UPDATE или INSERT возвратит ошибку. Опция WITH CHECK OPTION имеет свои собственные опции CASCADED и LOCAL. Опция WITH CHECK OPTION фактически гарантирует ссылочную целостность данных путем проверки отсутствия нарушений определения представления при обновлении данных.

Вот пример создания представления с использованием опции WITH CHECK OPTION.

CREATE VIEW EMPLOYEE_PAGERS AS

SELECT LAST_NAME, FIRST_NAME, PAGER

FROM EMPLOYEE_TBL

WHERE PAGER IS NOT NULL

WITH CHECK OPTION;

Здесь опция WITH CHECK OPTION запрещает ввод значений NULL в столбец PAGER представления, поскольку представление определяется данными, не содержащими значения NULL в столбце PAGER.

Теперь попробуем ввести значение NULL в столбец PAGER.

INSERT INTO EMPLOYE_PAGERS VALUES ('SMITH', 'JOHN', NULL);

INSERT INTO EMPLOYEE_PAGERS

*

ERROR at line 1:

ORA-01400: mandatory (NOT NULL) column is missing or NULL during insert

Опция WITH CHECK OPTION работает.

При использовании опции WITH CHECK OPTION в операторе создания представления из другого представления предлагается также использовать CASCADED или LOCAL.




По умолчанию, т. е. когда ничего не указано, используется CASCADED. В этом случае проверяются все представления, от которых зависит данное, все условия целостности при обновлении лежащей в основе представления таблицы, а также согласованность с ними условий в определении представления. При использовании опции LOCAL проверяется целостность данных только в рамках участвующих в определении представлений без сравнения с лежащей в их основе таблицей. Поэтому значительно безопаснее создавать представления с опцией CASCADED, поскольку в таком случае гарантируется ссылочная целостность данных лежащей в основе представлений таблицы.

CREATE VIEW описывает вид данных, основанный на одной или более основной таблицы в базе данных. Возвращаемые строки определены инструкцией SELECT, который перечисляет столбцы исходных таблиц. Только определение вида существует в базе данных; вид непосредственно не представляет, из себя, сохраненные данные. Это позволяет выполнять операции выбора, project, join и union над видами, как если бы они были таблицами.

Пользователь, который создает вид - его владелец, и имеет все привилегии для этого, включая возможность предоставлять (GRANT) привилегии другим пользователям, триггерам и сохраненным процедурам. Пользователь может иметь привилегии к виду, без необходимости иметь доступ к таблицам, на которых вид основан. При создании видов:

  • Вид только для чтения требует SELECT привилегиями на основные таблицы.
  • Модифицируемый вид требует ALL привилегий на основные таблицы.

Опция view_col гарантирует, что вид всегда содержит те же самые столбцы и, что столбцы имеют те же самые, определенные видом, имена. Имена столбцов вида соответствуют порядку и количеству столбцов перечисленных в <select>, по этому определите все столбцы вида или ни одного.



Определение view_col может содержать один или более столбцов основанных на выражении, которое комбинирует результаты двух столбцов. Выражение должно возвращать одиночное значение и не должно возвращать массив или массив элементов. Если вид включает выражение view_col опция обязательна.

Обратите внимание: Любые столбцы, используемые в значении выражения, должны присутствовать раньше чем выражение может быть определено.

Предложение инструкции SELECT не должно включать предложение ORDER BY.

WITH CHECK OPTION позволяет InterBase проверить, что строка добавлена к или модифицирована в виде... (not understand*). Не используйте WITH CHECK OPTION для видов предназначенных только для вида.

Вид модифицируем если:

  • Он подмножество одиночной таблицы или другого модифицируемого вида.
  • Все столбцы базовой таблицы исключенные из определения вида допускают значения NULL.
  • Инструкция SELECT вида не содержит подзапросов, предикат DISTINCT, предложение HAVING, агрегатных функций, joined таблиц, определенных пользователем функций или сохраненных процедур.

Если определение вида не удовлетворяет этим условиям, он рассматривается, как только для чтения.

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







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