Программирование >>  Построение запросов sql 

1 ... 66 67 68 [ 69 ] 70 71 72 ... 101


вставить строку в набор можно выполнить, например,

данных, возвращаемый с помощью следующего

Пусть требуется представлением. Это запроса:

INSERT INTO Abonent View (ACCOUNTCD, Fio) VALUES (999999, ВАСИЛЬЕВ С.В.);.

Результат выборки всех данных из представления AbonentView представлен на рис. 5.15.

ACCOUNTCD

443690

ТУЛУПОВА М.И.

443069

СТАРОДУБЦЕВ Е.В.

999999

ВАСИЛЬЕВ С.В.

Рис. 5.15. Данные представления AbonentView после вставки

Данные, содержащиеся в таблице Abonent после применения вставки в представление AbonentView, приведены на рис. 5.16.

операции

ACCOUNTCD

STREETCD

HOUSENO

FLATNO

PHONE

005488

АКСЕНОВ С.А.

556893

115705

МИЩЕНКО Е.В.

769975

015527

КОНЮХОВ В.С.

761699

443690

ТУЛУПОВА М.И.

214833

136159

СВИРИНА З.А.

350003

443069

СТАРОДУБЦЕВ Е.В.

683014

136160

ШМАКОВ С.В.

982222

126112

МАРКОВА В.П.

683301

136169

ДЕНИСОВА Е.К.

680305

080613

ЛУКАШИНА Р.М.

254417

080047

ШУБИНА Т.П.

257842

080270

ТИМОШКИНА Н.Г.

321002

999999

<null>

<null>

<null>

ВАСИЛЬЕВ С.В.

<null>

Рис. 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.

ACCOUNTCD

STREETCD

HOUSENO

FLATNO

PHONE

005488

АКСЕНОВ С.А.

556893

115705

МИЩЕНКО Е.В.

769975

015527

КОНЮХОВ В.С.

761699

443690

ТУЛУПОВА М.И.

214833

136159

СВИРИНА З.А.

350003

443069

СТАРОДУБЦЕВ Е.В.

683014

136160

ШМАКОВ С.В.

982222

126112

МАРКОВА В.П.

683301

136169

ДЕНИСОВА Е.К.

680305

080613

ЛУКАШИНА Р.М.

254417

080047

ШУБИНА Т.П.

257842

080270

ТИМОШКИНА Н.Г.

321002

Рис. 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;,



CODE

STREET

HOUSE

FLAT

NAME

005488

АКСЕНОВ С.А.

015527

КОНЮХОВ В.С.

443690

ТУЛУПОВА М.И.

136159

СВИРИНА З.А.

443069

СТАРОДУБЦЕВ Е.В.

136160

ШМАКОВ С.В.

136169

ДЕНИСОВА Е.К.

080613

ЛУКАШИНА Р.М.

080047

ШУБИНА Т.П.

080270

ТИМОШКИНА Н.Г.

Рис. 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.

CODE

STREET

HOUSE

FLAT

NAME

005488

АКСЕНОВ С.А.

015527

КОНЮХОВ В.С.

443690

ТУЛУПОВА М.И.

136159

СВИРИНА З.А.

443069

СТАРОДУБЦЕВ Е.В.

136160

ШМАКОВ С.В.

136169

ДЕНИСОВА Е.К.

080613

ЛУКАШИНА Р.М.

080047

БУЛГАКОВА Т.П.

080270

ТИМОШКИНА Н.Г.

123456

ТАРАСОВ А.В.

Рис. 5.19. Данные представления AbonentInformation после вставки строки и обновления таблицы Abonent

Пользователь может также выполнять запросы на обновление и удаление данных в представлении. Допустим, были выполнены последовательно два следующих запроса:



1 ... 66 67 68 [ 69 ] 70 71 72 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика