Программирование >>  Sql: полное руководство 

1 ... 143 144 145 [ 146 ] 147 148 149 ... 264


Инструкция CLOSE

Можно сказать, что инструкция close (ее синтаксическая диаграмма изображена да рис. 17.28) закрывает таблицу результатов запроса, созданную инструкцией open, и запрещает прикладной программе доступ к ней. Единственным параметром инструкции close является имя набора записей, связанного с данной таблицей результатов запроса; это должен быть набор записей, предварительно открытый с помощью инструкции open. Инструкция close может бьп-ь выполнена в любой момент после того, как набор записей был открыт. В частности, необязательно передавать в программу с помощью инструкции fetch все строки результатов запроса перед тем, как закрывать набор записей (хотя обычно бывает именно так). В конце транзакции все наборы записей автоматически закрываются. После того как набор записей закрыт, таблица результатов запроса становится недоступной прикладной программе.

CLOSE имя набора записей

Рис. 17.28. Синтаксическая диаграмма инструкции CLOSE

Наборы записей с произвольным доступом

Согласно стандарту SQL1, указатель набора записей может продвигаться по таблице результатов запроса только вперед. До последнего времени подобного режима работы с наборами записей придерживалось больщинство коммерческих СУБД. Если программе необходимо было повторно получить строку, которую указатель набора записей уже прошел, программа должна бьша закрыть набор записей, открыть его вновь (вынуждая СУБД еще раз выполнить запрос) и поочередно прочитать все строки вплоть до требуемой.

В начале 90-х годов в нескольких коммерческих СУБД данная концепция была расширена и было введено понятие набора записей с произвольным доступом, который, в отличие от стандартного набора записей, обеспечивает произвольный доступ к строкам результатов запроса. Требуйлую строку программа задает в расширенной инструкции fetch (рис. 17.29):

Ь-FETCH

- FIRST -

- LAST--PRIOR-

- NEXT -

- absolute номер строки -

-FROM имя набора записей \НТО-г-базовая переменная-г*-Ф

Рнс. 1729. Расширенная инструкция ТСН для наборов записей с произвольным доступом

Инструкция fetch first извлекает первую строку результатов запроса.

Инструкция fetch last извлекает последнюю строку результатов запроса.



Инструкция fetch prior извлекает строку результатов запроса, которая непосредственно предшествует текущей строке набора записей.

Инструкция fetch next извлекает строку результатов запроса, которая непосредст-венно следует за текущей строкой набора записей. Это соответствует стандартному перемещению указателя набора записей, и по умолчанию (если параметр перемеще-ния не задан) инструкция fetch вьшолняется именно таким образом.

Инструкция fetch absolute извлекает отдельную строку по ее номеру.

Инструкция fetch relative передвигает указатель набора записей вперед или назад на определенное число строк по отношению к его текущей позиции. Наборы записей с произвольным доступом особенно полезны в программах, которые позволяют пользователю просматривать содержимое базы данных. В ответ на запрос пользователя передвинуться вперед или назад на строку или на целый экран программа может легко извлечь требуемые строки результатов запроса.. Однако реализовать в СУБД набор записей с произвольным доступом гораздо труднее, чем обычный набор записей с последовательным доступом. Для поддержки наборов записей с произвольным доступом СД должна помнить все предыдущие результаты запросов, переданные в программу, и порядок, в котором были переданы эти строки. СУБД должна также обеспечить, чтобы ни одна параллельно выполняемая транзакция не модифицировала данные, уже полученные программой посредством набора записей с произвольным доступом, так как, используя расширенную инструкцию fetch, программа может повторно извлечь любую строку, через которую указатель набора записей уже прошел.

Необходимо понимать, что отдельные инструкции fetch, использующие набор записей с произвольным доступом, в некоторых СУБД могут потребовать выполнения очень большою объема работы. Вьшолнение инструкции fetch next, когда указатель набора записей установлен на первую строку таблицы результатов запроса, может занять гораздо больше времени, чем нормальное выполнение запроса, когда СУБД извлекает данные последовательно, шаг за шагом, а программа в это время с помощью инструкции fetch отбирает очередные строки результатов запроса. Прежде чем для промышленных приложений писать программы, использующие возможности набора записей с произвольным доступом, вам следует узнать рабочие характеристики применяемой СУБД.

В связи с тем что наборы записей с произвольным доступом очень удобны, а также из-за того что различные СУБД, поставляемые на рынок, реализовывали данную концепцию немного по-разному, это понятие было включено в стандарт SQL2. Если СУБД совместима со стандартом SQL2 только на уровне Entry Level, то поддержка наборов записей с произвольным доступом не требуется, но она обязательна на уровнях Intermediate Level и Full Level. В стандарте также определено, что если используется любое перемещение указателя набора записей, отличное от fetch next (перемещение по умолчанию), то в инструкции declare cursor должен быть явно задан набор записей с произвольным доступом. В соответствии с правилами стандарта SQL2, объявление набора записей в программе, представленной на рис. 17.23, должно выглядеть так:

exec sql declare repcurs scroll cursor for select name, quota, sales from salesreps where sales > quota order by name;



Удаление и обновление данных

с использованием указателей наборов записей

Прикладные программы часто используют указатели наборов записей для того, чтобы дать пользователю возможность просматривать таблицу строка за строкой. Например, пользователь может попросить вывести все заказы, сделанные одним клиентом. Программа объявляет набор записей для запроса к таблице orders и отображает на экране каждый заказ (возможно, в виде какой-либо формы), ожидая от пользователя сигнала для перехода к следующей строке. Просмотр таблицы таким способом продолжается до тех пор, пока пользователь не достигнет последней строки в таблице результатов запроса. Указатель набора записей служит указателем на текущую строку результатов. Если запрос извлекает данные из одной таблицы и не является итоговым запросом (как в данном примере), то указатель набора записей неявно адресует отдельную строку таблицы, так как одна строка результатов запроса строго соответствует одной строке данной таблицы.

В процессе просмотра пользователь может увидеть данные, которые необходимо изменить. Например, количество товара в каком-нибудь заказе может быть неправильным или клиент может захотеть удалить один из заказов. В такой ситуации пользователю требуется обновить или удалить этот заказ. Для идентификации заказа применяется не условие отбора, а указатель набора записей. Во встроенном SQL эта возможность обеспечивается посредством специальных инструкций delete и update, которые называются позиционньши.

Позиционная инструкция delete, синтаксическая диафамма которой изображена на рис. 17.30, удаляет из таблицы одну строку. Удаляемая строка является текущей строкой набора записей, указатель которого ссылается на данную таблицу. Чтобы выполнить инструкцию delete, СУБД локализует в базовой таблице строку, соответствующую текущей строке набора записей, и удаляет ее. После удаления у набора записей отсутствует текущая строка. Он фактически находится на пустом месте , оставшемся от удаленной строки, в ожидании продвижения на следующую строку с помощью очередной инструкции fetch.

I- DELETE FROM имя таблицы WHERE CURRENT OF имя набора januceu

Рис 17.30. Синтаксическая диаграмма позиционной инструкции DELETE

Позиционная инструкция update (ее синтаксическая диафамма изображена на рис. 17.31) обновляет одну строку таблицы. Обновляемая строка является текущей строкой набора записей, указатель которого ссьиается на данную таблицу. Выполняя эту инструкцию, СУБД локализует в базовой таблице сфоку, соответствующую текущей сфоке набора записей, и обновляет эту строку так, как это задано в Предложении set. После обновления строка остается текущей сфокой набора записей. На рис. 17.32 изображена профамма просмотра заказов, в которой применяются позиционные инструкции update и delete.



1 ... 143 144 145 [ 146 ] 147 148 149 ... 264

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