AUTONOMOUS_TRANSACTIONプラグマを利用すると、プログラムの呼び出し順に関係なく、
独立したトランザクションを持つ関数を作ることが出来ます。
例:このプロシージャーをコールする関数がロールバックしてもこのプロシージャはロールバックされません。
CREATE PROCEDURE lower_salary (emp_id NUMBER, amount NUMBER) AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
UPDATE employees SET salary = salary - amount WHERE employee_id = emp_id;
COMMIT;
END lower_salary;