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

Работа с курсорами

Для работы со строками, извлекаемыми из результирующего множества “многострочного” запроса посредством курсора необходимо выполнить три операции: открыть курсор (OPEN), считать информацию в ранее объявленные переменные (FETCH) и закрыть курсор (CLOSE). Например:

declare

cursor parts_cur is

select * from parts;

current_part parts %rowtype;

begin

open parts_cur;

loop

fetch parts_cur into current_part;

…другие операторы…

end loop;

close part_cur;

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

declare

cursor customers_cursor (state_id char) is

select * from sales.customers

where state = state_id;

begin

open parts_cursor (‘RU’);

В программе PL/SQL можно использовать несколько уникальных курсорных атрибутов – %ISOPEN, %FOUND, %NOTFOUND и %ROWCOUNT – для принятия решения во время обработки курсоров. В таблице 4 приведен список доступных в PL/SQL курсорных атрибутов с описанием.

Таблица 4 Курсорные атрибуты

Курсорный атрибут

Описание

%ISOPEN

Возвращает TRUE, если курсор открыт.

%ROWCOUNT

Возвращает число строк, содержащихся в курсоре после открытия курсора.

%NOTFOUND

Принимает значение TRUE, после того как из курсора вычитана последняя строка.

%FOUND

Принимает значение FALSE, после того как из курсора вычитана последняя строка.

В нижеследующем примере, применяется курсорный атрибут %FOUND для определения момента завершения цикла.

while parts_cursor %found

loop

fetch parts_cursor into current_part;

... другие операторы ...

end loop;

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

Для упрощения необходимых при установке и обработке курсоров можно пользоваться курсорными циклами FOR:

declare

cursor parts_cur is

select * from parts;

begin

for current_part in parts_cur

loop

…другие операторы…

end loop;

В курсорном цикле FOR автоматически объявляется переменная или запись с помощью, которой можно считывать записи, открывать курсор, выбирать из него строки и закрывать курсор, когда из него выбирается последняя строка.

Работа с курсорными переменными

Похожа – с рядом отличий – на работу с курсорами:

• Для курсорной переменной нельзя использовать курсорный цикл FOR.

• Курсор открывается в программе при помощи оператора OPEN FOR. При использовании строгого курсорного типа форма запроса, в котором определяется курсор, должна соответствовать форме курсорного типа.

В следующем фрагменте программы показаны операции, выполняемые для обработки курсорной переменной.

declare

type cursor_type is ref cursor;

customers_cursor cursor_type;

begin

open customers_cursor for

select id, last_name, first_name, phone from sales.customers;

while customers_cursor %found

loop

if ...then

... другие операторы ...

end if;

... другие операторы ...

end loop;

close customers_cursor;