Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_insert_error_handling

Error Handing bei Inserts - Fehler bei großen Einfüge Operationen verarbeiten

Bei großen Einfüge Operationen steht man oft vor dem Problem, dass einige wenige fehlerhafte Datensätze den ganzen Lauf „zerstören“.

Oft wäre es aber besser erst den größten Teil der Daten zu verarbeiten und dann erst nach dem Lauf die fehlerhaften Daten zu behandeln.

Dafür steht bei dem Insert Befehlt die Anweisung „LOG ERRORS INTO“ zur Verfügung, mit dem „REJECT LIMIT“ kann definiert werden, wie viele Fehler toleriert werden sollen, bis eine „echte“ Exception den Lauf abbricht.

Ablauf:

  • Tabelle für das Protokollieren der Fehler erstellen
  • Insert Befehl um die „LOG ERRORS INTO“ Anweisung erweitern

Error Tabelle mit dbms_errlog erstellen

SET serveroutput ON 
BEGIN
  -- Source Table - Error Table 
  dbms_errlog.create_error_log ( DML_TABLE_NAME     => 'EMP'
                               , ERR_LOG_TABLE_NAME => 'ERR_EMP');
exception
    WHEN others
    THEN
       dbms_output.put_line ('Error create error log :: '  || sqlerrm);
END;
/

siehe auch Oracle Dokumentation dbms_errlog

Insert Befehl um LOG ERRORS INTO erweitern

Insert Befehlt mit dem Kommando „LOG ERRORS INTO <ERROR_TABELLE> ('<TAG>') RECJECT LIMIT <count>„ erweiterten:

INSERT /*+ append */  
  INTO emp 
SELECT /*+ PARALLEL(EMP) */ *
 FROM emp_import
  LOG ERRORS INTO ERR_EMP ('DAILY_RUN') REJECT LIMIT 100
/

Der optionale Tag ist später sehr hilfreich, in der Error Tabelle den fehlerhaften Lauf zu identifizieren.

Update Beispiel

Beispiel für ein fehlerhaftes Update:

UPDATE emp SET empno=10000 LOG ERRORS INTO ERR_EMP ('DAILY_RUN') REJECT LIMIT 3;

In der Fehler Tabelle wird die Fehler Nummer, der Tag des Laufes und die Wert, die eingefügt werden sollten, dokumentiert.

Fehler auswerten:

SELECT * FROM ERR_EMP;
 
-- Transponierte Darstellung ! 
 
ORA_ERR_NUMBER$  => 1438
ORA_ERR_MESG$    => ORA-01438: Wert größer als die angegebene Gesams
ORA_ERR_ROWID$   => unsupported Datatype ::208
ORA_ERR_OPTYP$   => U
ORA_ERR_TAG$     => DAILY_RUN
EMPNO            => 10000
..
..
..

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/sql_insert_error_handling.txt · Zuletzt geändert: 2014/07/08 21:00 von gpipperr