===== Umgang mit Null Funktionen in SQL===== Für die Verarbeitung von NULL Values in SQL stehen bei Oracle zur Verfügung: * nvl - Ist der eigentliche Wert Parameter 1 Null, gebe den alternativen Wert Parameter 2 zurück * nvl2 - ist der zu prüfende Wert null geben Parameter 3 zurück, ansonsten Parameter 2 * NULLIF - Sind beide Parameter genau gleich, wird Null zurückgeben, ansonsten der erste Wert * [[http://docs.oracle.com/database/121/SQLRF/functions033.htm#SQLRF00617|COALESCE]] - Geben den ersten Parameter in der Liste zurück, der nicht null ist * [[https://docs.oracle.com/database/121/SQLRF/functions103.htm#SQLRF06327|LNNVL]] - Kann in der where Klausel verwendet werden um einen Kondition auf Spalten zu testen die auch Null Werte enthalten könnten * SYS_OP_MAP_NONNULL - undocumented ? ==== NVL ==== Mit der NVL Funktion wird eine Übergabe Wert auf Null geprüft, ist der Wert Null wird der alternative Wert 2 zurückgegeben. Beispiel: select nvl('Wert1','Wert2') from dual; NVL(' ----- Wert1 select nvl('','Wert2') from dual; NVL(' ----- Wert2 -- alternative Darstellung: select case when DUMMY is null then 'NULL-VALUE' else DUMMY end from dual / ==== NVL2 ==== Ist der zu prüfende Wert null geben den Parameter 3 zurück, ansonsten den Parameter 2. Beispiel: select nvl2('','Wert2','Wert3') from dual; NVL2( ----- Wert3 select nvl2('Wert1','Wert2','Wert3') from dual; NVL2( ----- Wert2 -- alternative Darstellung: select case when DUMMY is null then 'Wert3' else 'Wert2' end from dual / ==== NULLIF ==== Sind beide Parameter genau gleich, wird Null zurückgeben, ansonsten der erste Wert. Beispiel: select NULLIF('Wert1','Wert1') from dual; NULLI ----- select NULLIF('Wert1','Wert2') from dual; NULLI ----- Wert1 -- alternative Darstellung: select case when 'Wert1'='Wert1' then null else 'Wert1' end from dual / ==== COALESCE ==== Gebe den ersten Parameter in der Liste zurück, der nicht null ist. Beispiel: select COALESCE('','','Wert3','','Wert4') from dual; COALE ----- Wert3 -- alternative Darstellung (verkürzt .-) ): select case when DUMMY is null then case when 'Wert 1' is null then 'Wert 2' -- usw. nach unten ,... else 'Wert3' end else DUMMY end from dual / Aber wie lang kann die Liste sein? Ein Versuch mit über 30.000 Übergaben Parameter hat keine ersten Grenzen erkennen lassen, es wird nach dem ersten möglichen Treffer gesucht und der wird zurück geben. ==== Quellen ==== Oracle Dokumentation * http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions.htm#SQLRF006 Web später zum gleichen Thema diese Zusammenfassung gefunden: * https://oracle-base.com/articles/misc/null-related-functions#decode