Skip to Main Content

Oracle PL/SQL Einzel-Tipp ansehen

Hier sehen Sie unseren PL/SQL-Tipp „Exception Handling a la MARCO :-)”.

Exception Handling a la MARCO :-)

Tipp 6

  Thema: EXCEPTION
  Datenbank-Version: RDBMS 8.x
  Erstellt am 07.10.19
  Bearbeitet am 07.10.19
DROP TABLE err_tab;
CREATE TABLE err_tab (
c_sqlcode     NUMBER,
c_sqlerrm     VARCHAR2(4000),
c_errpos      VARCHAR2(100),
c_modulname   VARCHAR2(4000),
c_user        VARCHAR2(128),
c_time        DATE,
c_comment     VARCHAR2(4000),
c_vars        CLOB);

CREATE OR REPLACE PROCEDURE error_handling (
p_sqlcode         IN NUMBER,
p_sqlerrm         IN VARCHAR2,
p_errpos          IN VARCHAR2,
p_user            IN VARCHAR2,
p_time              IN DATE DEFAULT SYSDATE,
p_comment          IN VARCHAR2 DEFAULT '',
p_vars              IN VARCHAR2,
p_mode        IN VARCHAR2 DEFAULT 'T'
) IS
owner_name    VARCHAR2 (128);
caller_name   VARCHAR2 (128);
line_number   NUMBER;
caller_type   VARCHAR2 (128);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
OWA_UTIL.WHO_CALLED_ME (owner_name,caller_name,line_number,caller_type);
IF instr(p_mode,'T')>0 THEN -- Ausgabe in Tabelle
  INSERT INTO err_tab (c_sqlcode,c_sqlerrm,c_errpos,c_modulname,c_user,c_time,c_comment,c_vars )
  VALUES (p_sqlcode,p_sqlerrm,p_errpos,caller_type||' '||caller_name,p_user,p_time,p_comment,p_vars);
  COMMIT;
ELSIF instr(p_mode,'F')>0 THEN -- Ausgabe in Datei
  NULL; /* To be defined */
END IF;
END;
/

CREATE OR REPLACE PROCEDURE ptest IS
v_sqlcode NUMBER;
v_sqlerrm VARCHAR2(512);
v_errpos  VARCHAR2(512);
i         NUMBER;
BEGIN
NULL; -- Hier könnte Ihr Code stehen
i:=1/0;
EXCEPTION
    WHEN OTHERS THEN
        v_sqlcode:=sqlcode;
        v_sqlerrm:=sqlerrm;
        v_errpos:=DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
        error_handling(v_sqlcode,v_sqlerrm,v_errpos,user,sysdate,null,'i=1/0','T');
END;
/

exec ptest
SELECT * from err_tab;
Erklärung: Man  kann sich eine eigene Fehlerbehandlungsroutine schreiben, die als Autonome Transaktion läuft. Damit beeinflusst sie nicht die aufrufende Procedure/Function.

Wussten Sie schon, dass wir auch Schulungen zu Oracle PL/SQL anbieten?