prog:sql_insert_error_handling
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:sql_insert_error_handling [2013/08/31 21:46] – gpipperr | prog:sql_insert_error_handling [2014/07/08 21:00] (aktuell) – [Quellen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== 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 " | ||
+ | |||
+ | 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" | ||
+ | |||
+ | |||
+ | Ablauf: | ||
+ | * Tabelle für das Protokollieren der Fehler erstellen | ||
+ | * Insert Befehl um die "LOG ERRORS INTO" Anweisung erweitern | ||
+ | |||
+ | |||
+ | === Error Tabelle mit dbms_errlog erstellen === | ||
+ | |||
+ | <code sql> | ||
+ | set serveroutput on | ||
+ | begin | ||
+ | -- Source Table - Error Table | ||
+ | dbms_errlog.create_error_log ( DML_TABLE_NAME | ||
+ | , ERR_LOG_TABLE_NAME => ' | ||
+ | exception | ||
+ | when others | ||
+ | then | ||
+ | | ||
+ | end; | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | siehe auch [[http:// | ||
+ | |||
+ | |||
+ | === Insert Befehl um LOG ERRORS INTO erweitern === | ||
+ | |||
+ | Insert Befehlt mit dem Kommando **"LOG ERRORS INTO < | ||
+ | |||
+ | <code sql> | ||
+ | insert /*+ append */ | ||
+ | into emp | ||
+ | select /*+ PARALLEL(EMP) */ * | ||
+ | from emp_import | ||
+ | LOG ERRORS INTO ERR_EMP (' | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | <code sql> | ||
+ | update emp set empno=10000 LOG ERRORS INTO ERR_EMP (' | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | In der Fehler Tabelle wird die Fehler Nummer, der Tag des Laufes und die Wert, die eingefügt werden sollten, dokumentiert. | ||
+ | |||
+ | Fehler auswerten: | ||
+ | <code sql> | ||
+ | |||
+ | select * from ERR_EMP; | ||
+ | |||
+ | -- Transponierte Darstellung ! | ||
+ | |||
+ | ORA_ERR_NUMBER$ | ||
+ | ORA_ERR_MESG$ | ||
+ | ORA_ERR_ROWID$ | ||
+ | ORA_ERR_OPTYP$ | ||
+ | ORA_ERR_TAG$ | ||
+ | EMPNO => 10000 | ||
+ | .. | ||
+ | .. | ||
+ | .. | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | |||
+ | siehe auch : | ||
+ | |||
+ | Oracle: | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | Netz: | ||
+ | |||
+ | * [[http:// | ||
prog/sql_insert_error_handling.txt · Zuletzt geändert: 2014/07/08 21:00 von gpipperr