Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

24.3.6 Курсоры, курсорные типы и курсорные переменные

В литературе [2] курсоры иногда называют рабочей областью SQL – оператора. Однако точнее его можно определить как указатель на текущую строку результирующего множества оператора (рабочей области). В интерфейсе ODBC смысл курсора именно такой. Для PL/SQL вполне может подойти и определение курсора как рабочей области SQL – оператора, поскольку в нем задание оператора непосредственным образом сопряжено с объявлением курсора.

Операторы select возвращающие одну строку обрабатываются СУБД автоматически, т. е. она сама создаёт курсор и считывает данные посредством него из результирующего вектора. Для обработки строк запроса, возвращающего несколько строк, приложение должно объявлять курсор явно, указав его имя, а затем ссылаться на него при обработке строк по очереди. При обработке строк следует иметь в виду, что курсор устанавливается перед первой строкой результирующего множества, сформированного СУБД по выполнении запроса и сохраненного на сервере БД. Следующий пример демонстрирует процедуру объявления курсоров в блоке объявлений программ PL/SQL.

declare

cursor part_cur is select * from parts;

cursor cust_cur (state_id char) is

select id, l_name, f_name, phone

from customers

where state=state_id;

Здесь part_cur – это простой курсор, соответствующий всем строкам и столбцам таблицы parts, cust_cur – пример параметризованного курсора с параметром state_id.

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

Курсорные типы и переменные

Для курсоров установлен ряд ограничений. К примеру, программа PL/SQL не может передавать курсор другой программе в качестве параметра – открывать курсор и обрабатывать соответствующую информацию можно только непосредственно в самой программе. Работая с курсором и учитывая его функциональные ограничения, можно объявлять в программе курсорные типы (cursor types), определяемые пользователями, и соответствующие курсорные переменные (cursor variables). Например, в следующем фрагменте программы объявляются два различных курсорных типа и соответствующие курсорные переменные.

declare

-- СТРОГИЙ, КОНКРЕТНЫЙ КУРСОРНЫЙ ТИП

type parts_type is ref cursor return sales.parts %rowtype;

-- СООТВЕТСТВУЮЩИЕ КУРСОРНЫЕ ПЕРЕМЕННЫЕ

parts_cursor1 parts_type;

parts_cursor2 parts_type;

parts_cursor3 parts_type;

-- НЕСТРОГИЙ, ОБОБЩЕННЫЙ КУРСОРНЫЙ ТИП

type cursor_type is ref cursor;

Первый курсорный тип, PARTS_TYPE, является строгим (strong), так как в объявление курсорного типа включен возврат (RETURN clause), в котором указана форма (shape) или набор атрибутов курсорного типа. Следовательно, строгий курсорный тип ограничивает определение курсорных переменных впоследствии использующих этот тип. Применяются такие типы, если необходимо явно ограничивать форму курсорных переменных.

В отличие от первого, второй курсорный тип, CURSOR_TYPE, является нестрогим: он не содержит своего описания. Такие типы можно использовать в программах для объявления курсорных переменных любой формы.

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