Szukaj…


Uwagi

Typowe przypadki użycia dla transakcji autonomicznych to.

  1. Do budowania dowolnego rodzaju środowiska rejestrowania, takiego jak środowisko rejestrowania błędów wyjaśnione w powyższym przykładzie.
  2. Do kontroli operacji DML w wyzwalaczach w tabelach niezależnie od ostatecznego statusu transakcji (COMMIT lub ROLLBACK).

Korzystanie z autonomicznej transakcji do rejestrowania błędów

Poniższa procedura jest ogólna i będzie używana do rejestrowania wszystkich błędów w aplikacji we wspólnej tabeli błędów.

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;

Poniższy anonimowy blok PLSQL pokazuje, jak wywołać procedurę log_errors.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow