Программирование >>  Руководство по sql 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 105


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)

Теперь, когда создан требуемый курсор, им можно воспользоваться для отобра-

жения результатов.

SQL:

select *

from highaverage

Результат:

au id

title id

pub name

price

~172-32-1176~

PS3333~

New Age Books

19 .99~00

756-30-7391

PS1372

New Age Books

21.5900

724-80-9391

PS1372

New Age Books

21.5900

712-45-1867

MC2222

Binnet & Hardley

19.9900

672-71-3249

TC7777

Binnet & Hardley

14.9900

267-41-2394

TC7777

Binnet & Hardley

14.9900

472-27-2349

TC7777

Binnet & Hardley

14.9900



807-

-91-

6654

ТС3218

Binnet & Hardley

20.9500

427-

-17-

-2319

РС8888

Algodata Infosystems

20.0000

846-

-92-

7186

РС8888

Algodata Infosystems

20.0000

409-

-56-

7008

BU1032

Algodata Infosystems

19.9900

213-

-46-

8915

BU1032

Algodata Infosystems

19.9900

238-

-95-

7766

PC1Q35

Algodata Infosystems

22.9500

274-

-80-

9391

BU7832

Algodata Infosystems

19.9900

Давайте воспользуемся курсором highaverage, чтобы проиллюстрировать еще одну разновидность курсоров: курсор, получаемый из другого курсора. Вот как можно создать курсор, с помощью которого отображаются книги, опубликованные издательством Binnet & Hardley, цена которых превышает среднеарифметическое значение цен всех книг.

SQL:

create view higiiBandH as select * from highaverage

where pub name = Binnet & Hardley

select *

from highBandH

Результат:

au id

title id

pub name

price

~7Г2~45

-1867

MC2222

Binnet & Hardley

19.9900

672-71-

-3249

TC7777

Binnet & Hardley

14.9900

267-41-

-2394

TC7777

Binnet & Hardley

14.9900

472-27-

-2349

TC7777

Binnet & Hardley

14.9900

807-91-

-6654

TC3218

Binnet & Hardley

20.9500

Ограничения на создание курсоров

Несмотря на все разнообразие курсоров, которые можно создавать, всегда есть определенные ограничения, зависящие от конкретного 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 позволяет вам указывать правила модификации данных посредством курсоров. Если условия, указанные в определении курсора, нарушаются каким-нибудь из операторов модификации данных, такой оператор считается недопустимым. Подробнее об этом см. в справочных руководствах по своей системе.



1 ... 60 61 62 [ 63 ] 64 65 66 ... 105

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