|
Программирование >> Руководство по sql
SQL: create view cities (Author, Authorcity, Pub, Pubcity) as select au lname, authors.city, pub name, publishers.city from authors, publishers where authors.city = publishers.city Конечно, ничто не мешает вам переименовывать столбцы в операторе определения курсора в тех случаях, когда это представляется целесообразным. Однако необходимо помнить, что при переименовании любого столбца в курсоре вам придется перечислить все столбцы: число имен столбцов в скобках должно соответствовать числу элементов в списке выбора. Независимо от того, переименовываете вы столбец курсора или нет, тип его данных и нулевой статус зависят от того, как он был определен в своей базовой таблице (таблицах). Создание курсоров с объединениями и подзапросами в приведенных выше примерах фигурировали курсоры, определенные посредством вычисляемых столбцов и афегируюших функций. Возможно также определение курсоров с объединениями и подзапросов. Ниже приведен пример определения курсора, которое включает три объединения и один подзапрос. В нем находится идентификатор автора, идентификатор названия, имя издателя и цены на книги, стоимость которых превышает среднеарифметическое значение цен всех книг. (Включение идентификатора автора приводит к тому, что вы увидите несколько строк для книг с несколькими авторами.) SQL: create view highaverage as select authors.au id, titles.title id, pub name, price from authors, titleauthors, titles, publishers where authors.au id = titleauthors.au id and titles.title id = titleauthors.title id and titles.pub id = publishers.pub id and price > (select avg(price) from titles) Теперь, когда создан требуемый курсор, им можно воспользоваться для отобра-
Давайте воспользуемся курсором highaverage, чтобы проиллюстрировать еще одну разновидность курсоров: курсор, получаемый из другого курсора. Вот как можно создать курсор, с помощью которого отображаются книги, опубликованные издательством Binnet & Hardley, цена которых превышает среднеарифметическое значение цен всех книг. SQL: create view higiiBandH as select * from highaverage where pub name = Binnet & Hardley select * from highBandH Результат:
Ограничения на создание курсоров Несмотря на все разнообразие курсоров, которые можно создавать, всегда есть определенные ограничения, зависящие от конкретного SQL. В принципе, существует два источника ограничений. Элементы, использование которых не допускается в операторах CREATE VIEW (ORDER BY и иногда операторы с предложениями UNION, SELECT INTO или COMPUTE). Подробнее об этом см. в справочных руководствах по своей системе. Элементы, допускаемые в операторах CREATE VIEW (вычисляемые столбцы, агрегирующие функции), при использовании которых могут возникать проблемы с интерпретацией операторов модификации данных. Проблемы, связанные с обновлением, описаны ниже в этой главе. Если вы хотите, чтобы пользователи имели возможность выполнять большинство функций посредством курсора, ничто не мешает вам модифицировать совершенно законный оператор CREATE VIEW, избегая таким образом указанных ограничений. Предложение Check Option Одна из проблем, связанных с курсорами, заключается в возможности их некорректного изменения. Рассмотрим, например, курсор, который отображает все книги, цена которых меньше $5.00. Что произойдет, если одну из цен этих книг обновить посредством курсора (изменив ее, например, на $5.99?). Для разрешения такой проблемы предназначено необязательное предложение WITH CHECK OPTION, располагаемое после оператора SELECT: CREATE VIEW имя курсора [(имя столбца [, имя столбца]...) ] AS SELECT onepaTop [WITH CHECK OPTION] Предложение WITH CHECK OPTION заставляет SQL отвергать любые попытки модификации курсора, приводяшие к тому, что одна или несколько строк перестают удовлетворять условиям этого курсора. Другими словами, если оператор модификации данных (UPDATE, INSERT или DELETE) приводит к исчезновению каких-то строк из курсора, такой оператор считается недопустимым. В качестве примера вернемся к курсору hiprice, который включает названия всех книг, цена которых превышает $15 и величина затрат на которые превышает $5000: SQL: create view hiprice as select title, price, advance from titles where price > $15 and advance > $5000 select * from hiprice Результат: title price advance Secrets of Silicon Valley 20.0000 8000.0000 But Is It User Friendly? 22.9500 7000.0000 Onions, Leeks, and Garlic: Cooking Secrets 20.9500 7000.0000 Mediterranean Computer Phobic and Non-Phobic Individuals Behavior 21.5900 7000.0000 Variations Cktle.obq оператор обновляет одну из книг, видимых посредством курсора hiprice, изменяя ее цену на $14.99. SQL: update hiprice set price = $14.99 where title = Secrets of Silicon Valley Если оператор WITH CHECK OPTION был включен в определение курсора hiprice, то оператор UPDATE будет отвергнут, поскольку новая цена книги Secrets of Sihcon Valley сделает ее неприемлемой для данного курсора. Поскольку определение курсора hiprice не включает оператор WITH CHECK OPTION, оператор UPDATE будет выполнен. Но когда вы в следующий раз будете просматривать данные посредством курсора hiprice, вы уже не увидите книги Secrets of Silicon Valley. Опция проверки должна использоваться только в том случае, если определяемый курсор является обновляемым. В сущности предложение WITH CHECK OPTION позволяет вам указывать правила модификации данных посредством курсоров. Если условия, указанные в определении курсора, нарушаются каким-нибудь из операторов модификации данных, такой оператор считается недопустимым. Подробнее об этом см. в справочных руководствах по своей системе.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |