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.
październik 6th, 2007 at 3:58
Thank you for sharing!