Oracle mal wieder - LENGTH liefert neu NULL
Bis anhin konnte man LENGTH verwenden, um einen NULL String zu identifizieren. Es wurde LENGTH 0 zurückgegeben. Was sinnvoll war um leere Strings mittels TRIM zu erkennen. In der aktuellsten Version von 23ai (23.9.0.25.07) liefert LENGTH in diesen Fällen nicht mehr 0 sondern NULL. Sehr lange war es so das TRIM einen Leerstring '' geliefert hat, der Länge 0 hatte aber nicht identisch zu NULL war. Aktuell werden Leerstrings ('') mit oder ohne TRIM identisch zu NULL behandelt und liefern NULL. Wer kein NVL um seinen LENGTH(TRIM(x)) Check gemacht hat, ist richtig am Arsch.
Ich weiss nicht genau, wann das reingekommen ist, könnte mit Oracle 21c gewesen sein, 19c schien mir noch das alte Verhalten zu haben. Hab leider keine alten Oracle VMs mehr um das zu verifizieren. Aber aktuell reicht TRIM(x) IS NULL als Test für NULL Strings.
Falls jemand nach 23ai portieren möchte, sollte man sich alle LENGTH(TRIM(x)) Statements genau anschauen und ggf. mit einem NVL erweitern bevor man migriert. Hab das gerade beim Testen mit OTAP festgestellt.
Ich mein, wie blöd kann man sein? Basisfunktionen, die über mehrere Versionen stabil sind, einfach mal zu ändern?
Sie waren vielleicht nicht korrekt, wie die NULL Erkennung, aber sie sind überall integriert. Speziell um die NULL Erkennungsprobleme zu managen. Jetzt macht es Oracle richtig und verdammt gleichzeitig jede Software, die sich dieses Problems angenommen hat, zu umfangreichen Anpassungen. Man hätte auch eine neue LENGTH Funktion bereitstellen können, die bei NULL auch NULL nicht 0 liefert. Oder eine zusätzlichen Parameter.
Aber nein, man zerstört vorhandene Software und macht sie unbrauchbar. Nice für Oracle-Berater, da sind wieder Aufträge verfügbar. Aber der Rest, Unternehmen wie User haben jetzt mehr "Spass". Danke, Oracle.