Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Топ:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Дисциплины:
2022-12-20 | 37 |
5.00
из
|
Заказать работу |
|
|
Открытый курсор не запрещает изменять данные таблиц, выбираемых курсором, и даже удалять их строки, так как на курсор распространяется правило целостности операции SQL:
DECLARE
CURSOR curs_ a IS SELECT deptno FROM dept ORDER BY deptno DESC;
CURSOR curs_ b IS SELECT deptno FROM dept ORDER BY deptno DESC;
dno dept.deptno%TYPE;
BEGIN
OPEN curs_a;
FETCH curs_a INTO dno; DBMS_OUTPUT.PUT_LINE('cursor A:' || dno);
DELETE FROM dept WHERE deptno = 40;
OPEN curs_b;
FETCH curs _a INTO dno; DBMS_OUTPUT.PUT_LINE('cursor A:' || dno);
FETCH curs_b INTO dno; DBMS_OUTPUT.PUT_LINE('cursor B: ' || dno);
FETCH curs_a INTO dno; DBMS_OUTPUT.PUT_LINE('cursor A:' || dno);
FETCH curs_b INTO dno; DBMS_OUTPUT.PUT_LINE('cursor B: ' || dno);
FETCH curs_a INTO dno; DBMS_OUTPUT.PUT_LINE('cursor A:' || dno);
FETCH curs_b INTO dno; DBMS_OUTPUT.PUT_LINE('cursor B: ' || dno);
CLOSE curs_a;
CLOSE curs_b;
END;
/
SELECT * FROM dept;
ROLLBACK;
(Обратите внимание, что целостность данных, выдаваемых курсором, не пострадала).
Однако для изменения текущей строки, выбираемой с помощью курсора, есть более эффективное средство (см. фразу WHERE CURRENT OF в блокирующем курсоре ниже).
Атрибуты для явных курсоров
У каждого явно открываемого курсора имеются для использования в программе четыре атрибута:
Атрибут | Значение |
%ISOPEN | Имеет значение TRUE, если курсор открыт и FALSE, если нет |
%FOUND | Исключительное состояние INVALID_CURSOR, если курсор не открыт с помощью OPEN или закрыт с помощью CLOSE NULL – перед первым выполнением FETCH TRUE – после успешного выполнения FETCH FALSE – если FETCH не сумел выдать строку |
%NOTFOUND | Исключительное состояние INVALID_CURSOR, если курсор не открыт с помощью OPEN или закрыт с помощью CLOSE NULL – перед первым выполнением FETCH FALSE – после успешного выполнения FETCH TRUE – если FETCH не сумел выдать строку |
%ROWCOUNT | Исключительное состояние INVALID_CURSOR, если курсор не открыт с помощью OPEN или закрыт с помощью CLOSE Число – общее число строк, извлеченных после последней операции FETCH для курсора |
|
Синтаксис использования атрибута: имя_курсора % атрибут.
Пример использования в программе:
DECLARE
caller_rec caller_package.caller_cursor%ROWTYPE;
BEGIN
OPEN caller_package.caller_cursor
LOOP
FETCH caller_package.caller_cursor INTO caller_rec;
EXIT WHEN caller_package.caller_cursor%NOTFOUND
OR
caller_package.caller_cursor%ROWCOUNT > 10;
UPDATE call
SET caller_id = caller_rec.caller_id
WHERE call_timestamp < SYSDATE;
END LOOP;
CLOSE caller_package.caller_cursor;
END;
(Здесь предполагается, что имеется таблица с именем CALL с информацией о телефонных звонках и что есть пакет CALLER_PACKAGE для работы с этой информацией).
Неявные курсоры
Открываются при непосредственном указании в тексте операторов INSERT, UPDATE, DELETE и SELECT INTO. Явных операций открытия, OPEN, FETCH и CLOSE они не требуют.
В случае SELECT INTO возможны исключительные ситуации, при возникновении которых управление передается в раздел обработки исключительных ситуаций:
NO_DATA_FOUND – если не извлечено ни единой строки
TOO_MANY_ROWS – если извлечено более одной строки
С неявными курсорами связаны следующие атрибуты:
Атрибут | Значение |
%ISOPEN | Всегда FALSE, так как атрибут открывается неявно и закрывается сразу после отработки SQL-предложения |
%FOUND | NULL – перед выполнением SQL-оператора TRUE – если оператор обработал несколько строк (выдал – только одну) FALSE – если оператор не обработал ни одной строки |
%NOTFOUND | NULL – перед выполнением SQL-оператора FALSE – если оператор обработал несколько строк (выдал – только одну) TRUE – если оператор не обработал ни одной строки |
%ROWCOUNT | Число – количество обработанных строк |
%BULK_ROWCOUNT | Псевдо-индексная таблица с числом обработанных строк при использовании привязки массивом (только начиная с версии 8.1) |
|
Синтаксис использования атрибута: SQL% атрибут.
Пример использования в программе (в SQL*Plus):
BEGIN
UPDATE emp SET sal = sal WHERE deptno = &department_no;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('No employees in this department');
ELSE
DBMS_OUTPUT.PUT_LINE('Perfectly done for '|| SQL%ROWCOUNT ||’ employees’);
END IF;
END;
/
Неявный курсор для множественного отбора в цикле (FOR rec IN (SELECT … FROM …) LOOP … END LOOP;) атрибутов не имеет.
|
|
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!