Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle12c_r2_ora-01858_ora-01722_conversion_functions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
prog:oracle12c_r2_ora-01858_ora-01722_conversion_functions [2019/09/02 17:27] gpipperrprog:oracle12c_r2_ora-01858_ora-01722_conversion_functions [2019/09/03 09:43] (aktuell) – [Test Case] gpipperr
Zeile 1: Zeile 1:
 +=====Ab Oracle 12c R2 - Endlich mit ORA-01858 und ORA-01722 umgehen können - Fehler bei der Konvertierungs pro-aktiv behandeln und Datenformat vorher validieren erkennen=====
 +
 +**ab Oracle 12c R2 !**
 +
 +**Problem**:
 +
 +Wer kennt nicht das Problem, dass bei einem ETL Load eine von xxxxx tausend Zeilen einen Fehler aufweist und der ganze Import mit einem "ORA-01722: invalid number" oder einem "ORA-01843: not a valid month"  fehlschlägt. 
 +
 +Wie kann nun aber der fehlerhafte Datensatz gefunden werden?
 +
 +
 +**Lösung**
 +
 +Ab der Version 12c R2 der DB steht uns dazu die **VALIDATE_CONVERSION** Function zur Verfügung und Erweiterte Parameter bei den to_xxxx Funktionen, die eine Fehlerhandling ermöglichen.
 +
 +
 +----
 +
 +=== Test Case ===
 +
 +Test Daten:
 +<code sql >
 +create table convtest ( id number, wert1 varchar2(20));
 +
 +insert into convtest (id,wert1) values ( 1,'78609');
 +insert into convtest (id,wert1) values ( 2,'786,67');
 +insert into convtest (id,wert1) values ( 3,'12.12.2017');
 +insert into convtest (id,wert1) values ( 4,'01.30.2018');
 +
 +commit;
 +</code>
 +
 +
 +Alle Zeilen mit Zahlen mit der **VALIDATE_CONVERSION** Funktion erkennen:
 +
 +<code sql>
 +select id from convtest where VALIDATE_CONVERSION(wert1 AS number) = 1;
 +
 + ID
 +---
 +  1
 +  
 +-- With format mask
 +select id from convtest where VALIDATE_CONVERSION(wert1 AS number,('999D99'),'NLS_NUMERIC_CHARACTERS = '',.''') = 1;
 +
 +   ID
 +-----
 +    2
 +    
 +-- read Date
 +
 +select id from convtest where VALIDATE_CONVERSION(wert1 AS date,('dd.mm.yyyy')) = 1;
 +
 +   ID
 +-----
 +    3  
 +  
 +</code>
 +
 +
 +----
 +
 +==== Problem PL/SQL: ORA-43918: This Argument Must Be A Literal ====
 +
 +In einer 12.2 R2 Umgebung habe ich allerdings folgendes Problem : PL/SQL: ORA-43918: This Argument Must Be A Literal (Doc ID 2463944.1)
 +
 +
 +
 +
 +
 +Demnächst mehr
 +
 +
 +----
 +
 +====Quellen ====
 +
 +
 +Web:
 +
 +  * https://oracle-base.com/articles/12c/conversion-function-enhancements-12cr2
 +
 +Oracle:
 +
 +  *  VALIDATE_CONVERSION =>  https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/VALIDATE_CONVERSION.html#GUID-DC485EEB-CB6D-42EF-97AA-4487884CB2CD
  
prog/oracle12c_r2_ora-01858_ora-01722_conversion_functions.txt · Zuletzt geändert: 2019/09/03 09:43 von gpipperr