Zoeken…


Opmerkingen

Typische use cases voor autonome transacties zijn.

  1. Voor het bouwen van elk soort logboekraamwerk, zoals het foutenlogboekraamwerk dat in het bovenstaande voorbeeld is uitgelegd.
  2. Voor het controleren van DML-bewerkingen in triggers op tabellen, ongeacht de uiteindelijke status van de transactie (COMMIT of ROLLBACK).

Autonome transactie gebruiken voor logfouten

De volgende procedure is een generieke procedure die wordt gebruikt om alle fouten in een toepassing te registreren in een algemene foutlogboektabel.

CREATE OR REPLACE PROCEDURE log_errors
(
  p_calling_program IN VARCHAR2,
  p_error_code IN INTEGER,
  p_error_description IN VARCHAR2
)
IS
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  INSERT INTO error_log
  VALUES
  (
  p_calling_program,
  p_error_code,
  p_error_description,
  SYSDATE,
  USER
  );
  COMMIT;
END log_errors;

Het volgende anonieme PLSQL-blok laat zien hoe de log_errors-procedure wordt aangeroepen.

BEGIN
   DELETE FROM dept WHERE deptno = 10;
EXCEPTION
   WHEN OTHERS THEN
      log_errors('Delete dept',sqlcode, sqlerrm);
      RAISE;
END;

SELECT * FROM error_log;

CALLING_PROGRAM    ERROR_CODE    ERROR_DESCRIPTION                                                ERROR_DATETIME         DB_USER
Delete dept        -2292         ORA-02292: integrity constraint violated - child record found    08/09/2016             APEX_PUBLIC_USER


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow