Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_BD.doc
Скачиваний:
57
Добавлен:
26.09.2019
Размер:
254.46 Кб
Скачать

14. Курсоры, их атрибуты. Использование цикла for. Курсоры

Конструкция PL/SQL, называемая курсором, позволяет дать имя некоторой рабочей области, данные в которую будут помещаться операторами SQL. Имеются 2 типа курсоров: неявные и явные. PL/SQL неявно объявляет курсор для всех DML–утверждений языка SQL, включая запросы, возвращающие ровно одну строку.

Курсор может быть явно объявлен с помощью оператора

DECLARE

CURSOR имякурсора [(параметрыкурсора)]IS операторSelect;

Имя курсора - это необъявленный ранее идентификатор, а не переменная PL/SQL; его можно использовать только для обращения к запросу

Курсор может иметь параметры. Параметры описываются так же, как параметры любой процедуры или функции PL/SQL, а их конкретные значения задаются в момент открытия курсора.

После объявления курсора над ним можно выполнять следующие операции:

-открытие (OPEN). Открытие курсора предложением OPEN исполняет предложение SELECT и идентифицирует активное множество, т.е. все строки, удовлетворяющие поисковым условиям запроса. Для курсоров, объявленных с фразой FOR UPDATE, предложение OPEN также осуществляет блокировку этих строк. Предложение OPEN не извлекает строк активного множества. Пример предложения OPEN: OPEN accountants;

Курсору могут быть переданы параметры при открытии. Например, любое из следующих предложений открывает курсор dept_workers:

OPEN dept_workers; OPEN dept_workers('SALES');

-выбор очередной строки (FETCH). Предложение FETCH извлекает очередную строку из активного множества. Рассмотрим формат предложения FETCH: FETCH имякурсора INTO списокпеременных;

Для каждого значения столбца, извлекаемого запросом, ассоциированного с курсором, в списке INTO должна быть соответствующая переменная, имеющая совместимый с этим столбцом тип данных. Обычно используются не индивидуальные переменные, а переменная-запись.

-закрытие курсора (CLOSE). Предложение CLOSE деактивирует курсор, и активное множество становится неопределенным. Пример предложения CLOSE:

CLOSE dept_workers;

Атрибуты курсора

Каждый курсор, явно объявленный вами, имеет четыре атрибута: %NOTFOUND, %FOUND, %ROWCOUNT и %ISOPEN. Атрибуты позволяют вам получать полезную информацию о выполнении многострочного запроса.

Использование %NOTFOUND. Когда курсор открыт, строки, удовлетворяющие ассоциированному запросу, идентифицированы и образуют активное множество. Эти строки извлекаются операцией FETCH по одной за раз. Если последняя операция FETCH вернула строку, %NOTFOUND дает FALSE. Если последняя операция FETCH не смогла вернуть строку (так как активное множество исчерпано), %NOTFOUND дает TRUE.

Использование %FOUND. %FOUND логически противоположен атрибуту %NOTFOUND. После открытия явного курсора, но до первой операции FETCH, %FOUND дает NULL. Впоследствии он дает TRUE, если последняя операция FETCH вернула строку, или FALSE, если последняя операция FETCH не смогла извлечь строку, так как больше нет доступных строк.

Использование %ROWCOUNT. Когда вы открываете курсор, его атрибут %ROWCOUNT обнуляется. Перед первой операцией FETCH %ROWCOUNT возвращает 0. Впоследствии, %ROWCOUNT возвращает число строк, извлеченных операциями FETCH из активного множества на данный момент.

Использование %ISOPEN. %ISOPEN дает TRUE, если явный курсор открыт, и FALSE в противном случае. Следующий пример использует %ISOPEN для выбора действия:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]