Funkcja nvl2 w SQL i PL/SQL

Funkcja nvl2 jest rozszerzeniem funkcji nvl.

nvl2(str,val1,val2)

Jesli str jest null to zwraca val2 jesli str nie jest null to zwraca val1.
Przykład:

SQL> select nvl2('A','X','Y') from dual;
N
-
X

SQL> select nvl2(null,'X','Y') from dual;

N
-
Y

Użcie funkcji nvl2 w PL/SQL prowadzi do błędu:


SQL> declare
  2     l_str char(1);
  3     l_napis varchar2(10) := null;
  4  begin
  5     l_str := nvl2(null,'X','Y');
  6  end;  
  7  /
   l_str := nvl2(null,'X','Y');
            *
BŁĄD w linii 5:
ORA-06550: linia 5, kolumna 13:
PLS-00201: identyfikator 'NVL2' powinien być zadeklarowany
ORA-06550: linia 5, kolumna 4:
PL/SQL: Statement ignored

Niestety funkcja nvl2 jest zaimplementowana w SQL, a nie jest w PL/SQL. Najprościej zastąpić ją strukturą if - else - end if.


SQL> declare
  2     l_str char(1);
  3     l_napis varchar2(10) := null;
  4  begin
  5     if l_napis is null
  6     then
  7       l_str := 'Y';
  8     else
  9       l_str := 'X';
 10     end if;
 11  end;  
 12  /
Procedura PL/SQL została zakończona pomyślnie.

Jest to jeden z przykładów pokazujacy rozdzielenie implementacji SQL i PL/SQL.

One Response to “Funkcja nvl2 w SQL i PL/SQL”

  1. Wahoo Says:

    Thank you for sharing!

Leave a Reply

Szachy Ursus