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