Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:sql_nvl_functions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
prog:sql_nvl_functions [2019/09/17 11:06]
gpipperr [Umgang mit Null Funktionen in SQL]
prog:sql_nvl_functions [2019/09/17 11:08] (aktuell)
gpipperr [Umgang mit Null Funktionen in SQL]
Zeile 1: Zeile 1:
 +===== 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:
 +<code sql>
 +
 +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
 +
 +
 +</code>
 +
 +
 +==== NVL2 ====
 +Ist der zu prüfende Wert null geben den Parameter 3 zurück, ansonsten den Parameter 2.
 +
 +Beispiel:
 +<code sql>
 +
 +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
 +
 +
 +</code>
 +
 +==== NULLIF ====
 +
 +
 +Sind beide Parameter genau gleich, wird Null zurückgeben, ansonsten der erste Wert.
 +
 +Beispiel:
 +<code sql>
 +
 +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
 +/  
 +
 +</code>
 +
 +
 +==== COALESCE ====
 +
 +Gebe den ersten Parameter in der Liste zurück, der nicht null ist.
 +
 +Beispiel:
 +
 +<code sql>
 +
 +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
 +/
 +
 +</code>
 +
 +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
"Autor: Gunther Pipperr"