• Если удалить ПРЕДСТАВЛЕНИЕ 1, несостоятельными станут ПРЕДСТАВЛЕНИЕЗ и ПРЕДСТАВЛЕНИЕ4.
• Если удалить ПРЕДСТАВЛЕНИЕ2, несостоятельными станут ПРЕДСТАВЛЕНИЕ4
и ПРЕДСТАВЛЕНИЕЗ.
• Если будет удалена ТАБЛИЦА, несостоятельными станут все представления.
Опция 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 работает.
Опции CASCADED и LOCAL
При использовании опции WITH CHECK OPTION в операторе создания представления из другого представления предлагается также использовать CASCADED или LOCAL.
По умолчанию, т. е. когда ничего не указано, используется CASCADED. В этом случае проверяются все представления, от которых зависит данное, все условия целостности при обновлении лежащей в основе представления таблицы, а также согласованность с ними условий в определении представления. При использовании опции LOCAL проверяется целостность данных только в рамках участвующих в определении представлений без сравнения с лежащей в их основе таблицей. Поэтому значительно безопаснее создавать представления с опцией CASCADED, поскольку в таком случае гарантируется ссылочная целостность данных лежащей в основе представлений таблицы.
Обновление данных представления
Данные представления можно обновить при следующих условиях.
• Представление не должно содержать связей.
• Представление не должно содержать выражения GROUP BY.
• Представление не должно содержать ссылок на псевдостолбец ROWNUM.
• Представление не должно содержать итоговых функций.
• Не должно использоваться выражение DISTINCT.
• В выражении WHERE не должно быть вложенных выражений со ссылками на ту же таблицу, на которую ссылается выражение FROM.
По поводу синтаксиса оператора UPDATE обратитесь к тексту урока 14, "Использование подзапросов".
Добавление строк в представление
В представление можно добавлять строки данных с помощью команды INSERT. При этом действуют те же ограничения, что и в случае обновления данных, о котором шла речь выше. По поводу синтаксиса оператора INSERT обратитесь к тексту урока 14.
Удаление строк из представления
Из представления можно удалять строки данных с помощью команды DELETE. При этом действуют те же ограничения, что и в случае применения команд UPDATE и INSERT. По поводу синтаксиса оператора DELETE обратитесь к тексту урока 14.
Связывание представлений с таблицами и другими представлениями
Представление можно связать с таблицами и другими представлениями. При связывании представлений с таблицами и другими представлениями действуют те же правила, что и при связывании таблиц. По поводу связывания таблиц обратитесь в тексту урока 13, "Объединение таблиц в запросах".
Создание таблицы из представления
Из представления можно создать таблицу точно так же, как таблицу можно создать из другой таблицы (или представление из другого представления). Синтаксис соответствующего оператора имеет следующий вид.
CREATE TABLE ИМЯ_ТАБЛИЦЫ AS
SELECT {* | СТОЛБЕЦ1 [, СТОЛБЕЦ2 ]}
FROM ИМЯ_ПРЕДСТАВЛЕНИЯ
[ WHERE УСЛОВИЕ1 [, УСЛОВИЕ2 ]]
[ ORDER BY ]
Для примера создадим представление на основе двух таблиц.
CREATE VIEW ACTIVE_CUSTOMERS AS
SELECT С.*
FROM CUSTOMER_TBL С
ORDERS_TBL О
WHERE C.CUST_ID = O.CUST_ID;
Представление создано.
Теперь создадим таблицу на основе только что созданного представления.
Читать дальше