|
Программирование >> Построение запросов sql
вставить строку в набор можно выполнить, например, данных, возвращаемый с помощью следующего Пусть требуется представлением. Это запроса: INSERT INTO Abonent View (ACCOUNTCD, Fio) VALUES (999999, ВАСИЛЬЕВ С.В.);. Результат выборки всех данных из представления AbonentView представлен на рис. 5.15.
Рис. 5.15. Данные представления AbonentView после вставки Данные, содержащиеся в таблице Abonent после применения вставки в представление AbonentView, приведены на рис. 5.16. операции
Рис. 5.16. Данные таблицы Abonent Проверим работу предложения WITH CHECK OPTION, которое должно ограничивать операции DML, применяемые к представлению, таким образом, чтобы они не нарушали условия поиска запроса SELECT, на котором базируется представление. Для этого выполним следующий запрос: INSERT INTO Abonent View (AccountCD, Fio) VALUES (100000, СКЛЯРОВ А.А.);. Этот запрос на вставку не будет выполнен, т. к. содержит вставку значений, нарушающих условие отбора запроса SELECT, с помощью которого представление было создано. Будет выдано сообщение об ошибке следующего содержания: Operation violates CHECK constraint on view or table ABONENTVIEW (нарушение ограничения CHECK представления AbonentView). Следует отметить, что если бы при определении представления AbonentView не было предложения WITH CHECK OPTION, то предыдущий запрос не вернул бы ошибку. Строка с номером лицевого счета 100000 была бы вставлена в таблицу Abonent, на которой базируется представление, но в самом представлении ее не было бы видно. Чтобы избежать таких противоречий, нужно включать в определение представления раздел WITH CHECK OPTION. Тогда до реального выполнения операций модификации или вставки строк через представление для каждой строки будет проверяться, что она соответствует условиям представления. Выполним следующий запрос на удаление: DELETE FROM Abonent View WHERE AccountCD = 999999;. Данные, содержащиеся в таблице Abonent после удаления строки через представление AbonentView, приведены на рис. 5.17.
Рис. 5.17. Данные таблицы Abonent после удаления Рассмотрим еще один пример работы с обновляемым представлением. Пусть необходимо создать представление, которое показывало бы всю информацию об абонентах, кроме информации о номере телефона абонента. При этом должны быть исключены из рассмотрения абоненты с фамилиями, начинающимися с буквы М. Запрос на создание такого представления будет выглядеть следующим образом: CREATE VIEW Abonent Information (Code, Street, House, Flat, Name) AS SELECT AccountCD, StreetCD, HouseNO, FlatNO, Fio FROM ABONENT WHERE Fio NOT LIKE М% WITH CHECK OPTION;. Данное представление является обновляемым, потому что запрос основан на одной таблице, каждый столбец представления ссылается на простой столбец и предложение WHERE не содержит вложенного запроса. Данные, которые пользователь увидит после выполнения запроса SELECT * FROM Abonent Information;,
Рис. 5.18. Данные представления AbonentInformation Допустим, что был выполнен запрос на изменение данных в таблице Abonent: UPDATE Abonent SET Fio = БУЛГАКОВА Т.П. WHERE AccountCD = 080047;. Также пользователем был выполнен следующий запрос на добавление данных в представление AbonentInformation: INSERT INTO Abonent Information (Code, Street, House, Flat, Name) VALUES (123456, 3, 12, 34, ТАРАСОВ А.В.);. Так как столбец Phone может содержать NULL-значения, то вставка строки в представление проходит успешно. Данные, получаемые в результате выполнения запроса SELECT * FROM Abonent Information; представлены на рис. 5.19.
Рис. 5.19. Данные представления AbonentInformation после вставки строки и обновления таблицы Abonent Пользователь может также выполнять запросы на обновление и удаление данных в представлении. Допустим, были выполнены последовательно два следующих запроса:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |