=====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: 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; Alle Zeilen mit Zahlen mit der **VALIDATE_CONVERSION** Funktion erkennen: 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 ---- ==== 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