prog:oracle12c_r2_ora-01858_ora-01722_conversion_functions
Inhaltsverzeichnis
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
prog/oracle12c_r2_ora-01858_ora-01722_conversion_functions.txt · Zuletzt geändert: 2019/09/03 09:43 von gpipperr