Luego de pensarlo un rato y viendo algunos ejemplos de el uso de la Función Nvl pude llegar a lo siguiente:
Cuando necesitamos crear un Stp que dentro de él debe realizar búsquedas o procesar algún cursor, se nos presenta un problema, como sabemos cuando un campo es nulo o trae un valor, por lo tanto tenemos que armar un Query en tiempo de ejecución o dinámico como leí en varios lados.
Cuando el campo trae un valor tenemos un Query similar a este:
Select * from tabla where campo = valor;O cuando el parámetro es nulo:
Select * from tabla where campo is null;Para integrar estas dos situaciones se puede hacer lo siguiente:
Select * from tabla where
(
(nvl(campo,0) = 0 and campo is null)
or
(nvl(campo,0) <> 0 and campo = valor )
);Cuando campo es Null por ejemplo, la función Nvl devuelve 0 y se da True la primer parte del And, y por lo tanto cuando el motor evalúa la segunda parte del AND.
Para la segunda parte del OR la Funcion “Nvl(campo,0) <> 0” es False y ya no evalúa el resto de la condición.
De esta manera funciona nuestro Where Dinámico
Espero que sea de ayuda.
