Oracle
 sql >> база данни >  >> RDS >> Oracle

Регистрирайте съобщения за грешка в съхранената процедура на Oracle

Ако решите да превъртите своя собствена регистрация и да влезете в таблица, може да отидете на автономна транзакция маршрут.

Автономната транзакция е транзакция, която може да бъде извършена независимо от текущата транзакция, в която се намирате.

По този начин можете да регистрирате и ангажирате цялата информация, която искате, към вашата журнална таблица, независимо от успеха или неуспеха на вашата съхранена процедура или родителска транзакция на партиден процес.

CREATE OR REPLACE PROCEDURE "SP_LOG" (
    P_MESSAGE_TEXT VARCHAR2
) IS
  pragma autonomous_transaction;
BEGIN

    DBMS_OUTPUT.PUT_LINE(P_MESSAGE_TEXT);

    INSERT INTO PROCESSING_LOG (
        MESSAGE_DATE,
        MESSAGE_TEXT
    ) VALUES (
        SYSDATE,
        P_MESSAGE_TEXT
    );
    COMMIT;

END;
/

След това, ако го извикате по този начин, все още можете да получавате съобщения, ангажирани към вашата журнална таблица, дори ако имате повреда и върнете транзакцията си:

BEGIN
  SP_LOG('Starting task 1 of 2');

  ... code for task 1 ...

  SP_LOG('Starting task 2 of 2');

  ... code for task 2 ...

  SP_LOG('Ending Tasks');

  ... determine success or failure of process and commit or rollback ... 

 ROLLBACK;
END;
/

Може да искате да го подредите с изключения, които имат смисъл за вашия код, но това е общата идея, данните, записани в извикванията към SP_LOG, продължават, но родителската транзакция все още може да бъде върната назад.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. (Български) Как да използвате Oracle Database 19c Предварително изградена VM за разработчици

  2. InstallAllOracleASPNETProviders не работи правилно

  3. Поток за влизане в R12.2 и основно отстраняване на неизправности

  4. Как можете да разберете кои колони са неизползвани във ALL_TAB_COLS?

  5. Oracle Check Constraint