Estoy dudando un poco. Supongamos procedimientos de este paquete:Alcance de transacción autónoma y aumento de error
PROCEDURE ERR_MANAGER(I_ERRM IN VARCHAR2) IS
BEGIN
ROLLBACK;
--DO SOME STUFF
END ERR_MANAGER;
PROCEDURE test IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
test2;
COMMIT;
EXCEPTION WHEN OTHERS THEN ERR_MANAGER(SQLERRM);
END test;
PROCEDURE test2 IS
BEGIN
--DO SOME TRANSACTIONNAL DML
RAISE_APPLICATION_ERROR(-20001, 'ERR'); --for the test purpose, in reality this could be any actual error
END test2;
Por lo tanto, como se puede ver que hay un error en test2()
, que se va a levantar a test()
, y luego ser manejado en el método err_manager()
.
así que tengo 2 preguntas:
- ¿cuál es el alcance de err_manager()? ¿Todavía está dentro de la transacción autónoma? Supongo que sí, ya que solo es una llamada a función, pero me gustaría estar seguro
- ¿Qué sucede si sale brutalmente de una transacción autónoma debido a un error al subir a niveles superiores, sin proceder a ningún tipo de confirmación o reversión?
Muchas gracias. S.
fantástica, gracias! – Sebas