Важно различать транзакции и блоки PL/SQL. Если начинается блок, то это не значит, что начинается транзакция. Аналогично, начало транзакции не обязательно должно совпадать с началом блока. Предположим, что выполняется несколько операторов в SQL*Plus:
SET = +
ROLLBACK WORK;
END;
Сначала выполняется оператор INSERT, а затем анонимный блок PL/SQL. В свою очередь, в блоке выполняются операторы UPDATE и ROLLBACK. Оператор ROLLBACK отменяет результаты работы не только оператора UPDATE, но и предшествующего оператора INSERT, который вместе с блоком является частью одного сеанса и, следовательно, одной транзакции.
Точно так же в одном блоке PL/SQL может содержаться несколько транзакций:
С помощью этого блока в таблицу будут вводиться числа от 1 до 500, причем транзакции будут завершаться через каждые 50 строк. Таким образом, за время выполнения одного блока будет произведено 10 транзакций.
< Предыдущая | Следующая > |
---|