Ich zweifle ein bisschen. Lassen Sie sich dieses Pakets der Verfahren übernehmen:autonome Transaktionsumfang und Fehlererhöhung
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;
So, wie Sie Fehler in test2()
gibt es zu sehen, die auf test()
aufzurichten wird, und dann in den err_manager()
Verfahren behandelt werden.
So habe ich 2 Fragen:
- , was den Umfang des err_manager ist()? Ist es immer noch innerhalb der autonomen Transaktion? Ich denke schon, da es nur ein Funktionsaufruf ist, aber ich möchte sicher sein
- was passiert, wenn Sie eine autonome Transaktion wegen einer Fehlererhebung auf höhere Ebenen brutal beenden, ohne irgendeine Art von Commit oder Rollback durchzuführen?
Vielen Dank. S.
fantastisch, danke! – Sebas