Oracle: usar IF en WHERE

Buenas,
se me ha planteado un problema y no sé cómo solucionarlo.

Estoy haciendo un procedimiento en pl/sql de oracle que recibe tres variables. Dos de ellas son años y la tercera es una variable. Esta variable puede venir sí o sí con tres valores diferentes, es una char: 0, 1, 2.

Dependiendo del valor, en el SELECT hay un filtro WHERE que debe filtrar sobre una tabla el tipo de persona que es.

Siendo:
0 todas las personas
1 solo mujeres
2 hombres y niños sin mujeres

Se me había ocurrido usar un DECODE tal que así:

AND pers.tipo= DECODE(valor_variable, 1, tip.homb, 2, tip.mujer)

Para el tipo 1 está claro, pero cómo puedo coger todos los tipos o luego también cómo puedo no coger del tipo 1?

Alguna idea?

Tampoco quiero hacer una select/vista por cada tipo que me venga.

Muchas gracias y buen finde!!!
¿Y por qué no cambias el char de la variable por tip.hombre o tip.mujer, que sea nullable para indicar todas las personas? Así sería algo similar a:

AND (pers.tipo=valor_variable OR valor_variable is null)

Saludos.
1 respuesta