Використання неявних курсорів при DML-операціях

Напевно у багатьох виникала необхідність всередині PLSQL блоку перевірити, скільки рядків було вставлено, видалено або оновлено останньої DML-операцією. Всі знають, що десь воно повинно бути, але не всі уявляють де. У SQL * Plus так і в різних оболонках для роботи з БД ми бачимо написи


SQL> UPDATE test_tab t SET t.col1=1;

3 rows updated


Але як перевірити результат виконання в коді?
Для подібних цілей в СУБД Oracle передбачений неявний курсор, який дозволяє читати інформацію про останній відпрацьованому курсорі. Дивно, але ім'я йому SQL!
Даний неявний курсор має наступні атрибути:% FOUND,% ISOPEN,% NOTFOUND, і% ROWCOUNT.
%FOUND показує, чи було зміна рядків.
%NOTFOUND – DML-операція не змогла змінити рядка.
%ROWCOUNT – На яку кількість рядків поширювалася DML-операція.
%ISOPEN – Завжди FALSE, тому що СУБД закриває всі курсори, пов'язані з SQL-виразом, відразу після завершення DML-операції.

Приклад з офіційної документації:

CREATE TABLE employees_temp AS SELECT * FROM employees;
BEGIN
UPDATE employees_temp
SET salary = salary * 1.05
WHERE salary < 5000;

DBMS_OUTPUT.PUT_LINE(“Updated ” // SQL%ROWCOUNT //
” salaries.”);
END;
/



Вирішив спробувати причепити підсвічування синтаксису від Івана Салагаева. Подивимося як там чого.
UPD: не виходить …
UPD: вийшло!

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*