Sök…


Anmärkningar

Typiska användningsfall för autonom transaktion är.

  1. För att bygga alla typer av loggningsramar som felsloggarramen som förklaras i exemplet ovan.
  2. För granskning av DML-operationer i triggers på tabeller oavsett transaktionens slutliga status (COMMIT eller ROLLBACK).

Använda autonom transaktion för loggfel

Följande procedur är en generisk procedur som kommer att användas för att logga alla fel i en applikation till en gemensam felloggtabell.

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;

Följande anonyma PLSQL-block visar hur man kallar log_errors-proceduren.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow