Cuando tenemos variables o parámetros que pueden valer nulo y los comparamos pueden producir resultados que no esperamos, por ejemplo:
declare
v_variable1 varchar2(20):=null;
v_variable2 varchar2(20):=null;
begin
if v_variable1 = v_variable2 then
--salida estandar de texto
dbms.output.put_line('Bien');
else
dbms.output.put_line('Mal');
end if;
end;
ó tenemos
declare
v_variable1 varchar2(20):=null;
v_variable2 varchar2(20):='hola';
begin
if v_variable1 <> v_variable2 then
--salida estandar de texto
dbms.output.put_line('Bien');
else
dbms.output.put_line('Mal');
end if;
end;
Fijaros que en segundo caso se ha cambiado el valor de la v_variable2 y el operador igual "=" por distinto "<>".
En ambos casos saldrá por la salida estándar el mensaje "Mal" esto es debido a que la comparación que contenga nulos siempre devuelve NULL y siempre se ejecutara la sentencia del "else".
Para arreglar esto podemos utilizar la función NVL, que teneis su sintaxis en la entrada de funciones integradas.
Para el ultimo caso:
declare
v_variable1 varchar2(20):=null;
v_variable2 varchar2(20):='hola';
begin
if NVL(v_variable1,' ') <> NVL(v_variable2 then,' ')
--salida estandar de texto
dbms.output.put_line('Bien');
else
dbms.output.put_line('Mal');
end if;
end;
Ahora si que se ejecutara la sentencia del IF. El primer caso se soluciona de la misma forma.
No hay comentarios:
Publicar un comentario