TYPE t_t_var IS TABLE OF varchar2(20)
INDEX BY binary_integer;
tName t_t_var;
tCity t_t_var;
BEGIN
SELECT sname, city BULK COLLECT INTO tName, tCity
FROM sal WHERE comm < 0.2;
-- работасколлекциями
END;
DECLARE
CURSOR c_sal(p_Comm number) IS
SELECT * FROM sal WHERE comm > p_Comm;
TYPE t_t_sal IS TABLE OF c_sal %ROWTYPE
INDEX BY binary_integer;
tSal t_t_sal;
BEGIN
OPEN c_sal( 0.1);
FETCH c_sal BULK COLLECT INTO tSal LIMIT 5;
-- работас коллекцией
END;
· Ключевыеслова BULK COLLECT можноиспользоватьтольковпредложениях SELECT INTO, FETCH INTO и RETURNING INTO
· Начиная с Oracle9iBULKCOLLECT можно применять в динамическом SQL
· Коллекции строк можно применять в BULKCOLLECT только начиная с Oracle9iRelease2
· Коллекции заполняются начиная с индекса 1, и далее элементы добавляются последовательно (без пропусков), заменяя уже имеющиеся
· SELECT … BULKCOLLECT нельзя использовать в операторе FORALL
FORALL idx IN tName.first .. tName.last
UPDATE sal SET comm = comm + 0.05 WHERE sname = tName(idx)
RETURNING comm BULK COLLECT INTO tComm;
RETURNING в операторе FORALL заполняет коллекцию tComm последовательно для всех операторов UPDATE. RETURNING в операторе FOR заполняет коллекцию заново для каждого UPDATE, затирая уже имеющиеся элементы коллекции.
2.7. SELECT c предложением FOR UPDATE
Инструкция SELECTc предложением FORUPDATE заблокирует набор выбранных строк еще до того, как вы приступите к их изменению. Никто не сможет изменить эти строки, пока вы не выполните COMMIT или ROLLBACK.
CURSOR c_sal(p_Comm number) IS
SELECT * FROM sal WHERE comm.> p_Comm
FOR UPDATE;
CURSOR c_sal(p_Comm number) IS
SELECT s.sname, o.odate, o.amt
FROM sal s, ord o
WHERE s.snum=o.snum AND s.comm> p_Comm
FOR UPDATE OF o.amt;
После выполнения оператора COMMIT или ROLLBACK текущая позиция в открытом курсоре будет утеряна. Последующее выполнение оператора FETCH вызовет исключительную ситуацию.
В инструкциях UPDATE и DELETE можно использовать специальное предложение WHERECURRENTOF для обработки последней выбранной из курсора строки.
… WHERE CURRENT OF имя_курсора
2.8. Курсорные переменные
Курсорная переменная – это переменная, содержащая ссылку на курсор. Курсорные переменные предоставляют механизм передачи результатов запроса между разными программами PL/SQL.
Все возможности статических курсоров и методы работы с ними применимы при использовании курсорных переменных. Используются операторы OPEN, FETCH и CLOSE. Доступны стандартные атрибуты курсоров – %ISOPEN, %FOUND, %NOTFOUND и %ROWCOUNT.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.