=====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