DELETE FROM emp WHERE ...
IF SQL%ROWCOUNT > 10 THEN -- было удалено более десяти строк
...
END IF;
Если утверждение SELECT INTO возвращает больше чем одну строку, PL/SQL вызывает предопределенное исключение TOO_MANY_ROWS, и % ROWCOUNT производит 1,а не фактическое число строк, которые удовлетворяют запрос.
Создание пакетного курсора
Пакетный курсор подобен процедуре в том, что описание курсора и типа возвращаемого атрибута располагается в области спецификации пакета. Затем определяется "тело" курсора в области спецификации тела пакета:
CREATE OR REPLACE PACKAGE ORDER_TOTAL
AS
cursor c_line_item return line_item.merch_gross%TYPE;
...
end order_total;
CREATE OR REPLACE PACKAGE BODY ORDER_TOTAL
AS
CURSOR c_line_item RETURN line_item.merch_gross%TYPE
SELECT merch_gross
FROM line_item
WHERE order_num = g_order_num;
...
END orde_total;
Пример.
Следующий курсор извлекает из таблицы emp информацию о 5 самых высокооплачиваемых служащих и заносит ее в предварительно созданную таблицу tmp.
DECLARE
CURSOR c1 IS
SELECT ename, sal FROM emp
ORDER BY sal DESC;
name emp.ename%TYPE;
salary emp.sal%TYPE;
BEGIN
OPEN c1;
FOR i IN 1..5 LOOP
FETCH c1 INTO name, salary;
EXIT WHEN c1%NOTFOUND;
INSERT INTO tmp VALUES(name, salary);
COMMIT;
END LOOP;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.