sql >> Database teknologi >  >> RDS >> Oracle

Log fejlmeddelelser i Oracles lagrede procedure

Hvis du beslutter dig for at rulle din egen logning og logge ind på en tabel, kan du gå til Autonome transaktioner rute.

En autonom transaktion er en transaktion, der kan udføres uafhængigt af den aktuelle transaktion, du er i.

På den måde kan du logge og overføre al den information, du ønsker, til din logtabel, uafhængigt af succesen eller fiaskoen af ​​din lagrede procedure eller batchprocess overordnede transaktion.

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;
/

Så hvis du kalder det sådan, kan du stadig få beskeder, der er forpligtet til din logtabel, selvom du har en fejl og ruller din transaktion tilbage:

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;
/

Du vil måske rydde op med undtagelser, der giver mening for din kode, men det er den generelle idé, dataene skrevet i kaldene til SP_LOG består, men modertransaktionen kan stadig rulles tilbage.



  1. PostgreSQL regexp_replace() for at beholde kun et mellemrum

  2. Søgeordssøgning og rangeringsresultat

  3. Find lignende billeder i (ren) PHP / MySQL

  4. MySqli-kommandoer ude af synkronisering; du kan ikke køre denne kommando nu