Skip to Main Content
 

  Oracle PL/SQL-Tipps

  Kurze Oracle PL/SQL Tipps der Muniqsoft Training Training GmbH

     Zu unseren Schulungen

Hier veröffentlichen wir regelmäßig kurze PL/SQL-Code-Snippets.


 Tipp: 6
  Bereich: EXCEPTION
  Versionsinfo: RDBMS 8.x
  Erstelldatum: 07.10.2019
  Letzte Überarbeitung: 09.08.2024
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, dass die Muniqsoft Training seit Jahrzehnten Schulungen zu Oracle-Datenbanken und PL/SQL anbietet?
Erfahren Sie, was wir gerne auch für Ihre Firma tun können...