Курсорная переменная предоставляет программисту новые возможности:
· может быть связана с разными запросами по ходу выполнения программы
· может быть передана в качестве аргумента процедуре или функции
· значение одной курсорной переменной может быть присвоено другой курсорной переменной
2.8.1. Объявление типов REF CURSOR
TYPE имя_типа_курсора IS REF CURSOR [ RETURN возвращаемый_тип ];
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
TYPE cust_curtype IS REF CURSOR;
2.8.2. Объявление курсорной переменной
имя_курсорной переменной имя_типа_курсора ;
DECLARE
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
cv_salsal_curtype; -- курсорная переменная
BEGIN
. . .
END;
2.8.3. Открытие курсорной переменной
OPENимя_курсорной_переменнойFORинструкция_select;
Оператор OPEN инициализирует курсорную переменную, то есть создает объект курсора и помещает ссылку на него в переменную.
· Открытие курсорной переменной сильнотипизированного типа
DECLARE
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
cv_salsal_curtype; -- курсорная переменная
BEGIN
OPEN cv_sal FOR select * from sal;
END;
· Открытие курсорной переменной слаботипизированного типа
DECLARE
TYPE sal_curtype IS REF CURSOR;
cv_salsal_curtype; -- курсорная переменная
BEGIN
OPEN cv_sal FOR select * from sal;
OPEN cv_sal FOR select sname, comm from sal;
OPEN cv_sal FOR select odate, amt from ord;
END;
2.8.4. Выборка данных из курсорной переменной
FETCHимя_курсорной_переменнойINTO имя_записи;
FETCHимя_курсорной_переменнойINTO имя_переменной, имя_переменной;
Если возвращаемые запросом данные не соответствуют структурам, указанным в предложении INTO, то генерируется исключение ROWTYPE_MISMATCH.
DECLARE
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
cv_salsal_curtype; -- курсорная переменная
rec_sal sal%ROWTYPE;
BEGIN
OPEN cv_sal FOR select * from sal;
FETCH cv_sal INTO rec_sal ;
CLOSE cv_sal;
. . .
END;
Области видимости курсорной переменной и объекта курсора могут не совпадать. Объект курсора остается доступным до тех пор, пока на него ссылается хоть одна активная переменная.
DECLARE
TYPE sal_curtype IS REF CURSOR RETURN sal%ROWTYPE;
cv_sal1 sal_curtype; -- курсорная переменная 1
rec_sal sal%ROWTYPE;
DECLARE
cv_sal2 sal_curtype; -- курсорная переменная 2
BEGIN
OPEN cv_sal2 FOR select * from sal;
cv_sal1 := cv_sal2;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.