Probé este ejemplo en Oracle 11.2.0.2.7. Se puede comparer dos valores con NULLIF. Si son iguales, Oracle responde con un nulo.
SQL> select nvl(nullif(1,1),999) from dual
2 /
NVL(NULLIF(1,1),999)
--------------------
999
SQL>
Si son diferentes, Oracle responde con el primer valor:
SQL> select nullif(1,2) from dual
2 /
NULLIF(1,2)
-----------
1
SQL>
También se puede hacerlo con una cadena de caracteres:
SQL> select nvl(nullif('manzanas','manzanas'),'null')
2 from dual
3 /
NVL(NULLIF('MANZANAS','MANZANAS'),'NULL')
-----------------------------------------
null
SQL> select nullif('manzanas','naranjas') from dual
2 /
NULLIF('MANZANAS','NARANJAS')
-----------------------------
manzanas
Se puede emplear NULLIF con columnas de una table o de una vista así:
SQL> select nullif(username,password) from dba_users
2 where username = 'SYSTEM'
3 /
NULLIF(USERNAME,PASSWORD)
------------------------------
SYSTEM
SQL>
En el ejemplo siguiente, he empleado NULLIF con una variable:
SQL> variable a1 number
SQL> begin
2 select 13 into :a1 from dual;
3 end;
4 /
Procedimiento PL/SQL terminado correctamente.
SQL> select nullif(:a1,14) from dual
2 /
NULLIF(:A1,14)
--------------
13
SQL>
Si intentas a emplear NULLIF con valores de clases diferentes, Oracle contesta con un error ORA-00932 y un mensaje apropiado para la clase de cada valor:
SQL> select nullif(1,'manzanas') from dual
2 /
select nullif(1,'manzanas') from dual
*
ERROR en linea 1:
ORA-00932: tipos de dato inconsistentes: se esperaba
NUMBER se ha obtenido CHAR
SQL> select nullif('manzanas',1) from dual
2 /
select nullif('manzanas',1) from dual
*
ERROR en linea 1:
ORA-00932: tipos de dato inconsistentes: se esperaba
CHAR se ha obtenido NUMBER
SQL>
No hay comentarios:
Publicar un comentario