sql >> Base de Datos >  >> RDS >> Oracle

Use como '%' y haga coincidir los valores NULOS con NÚMERO de columnas

Eso parece que te estás haciendo la vida difícil. Déjelos nulos, luego haga:

where (param1 is null or t.col1 like param1)
and (param2 is null or t.col2 like param2)

Si param1 (el argumento del procedimiento; la vida es más simple cuando los nombres de sus parámetros/variables y los nombres de las columnas son diferentes... así que cambié los nombres de las columnas para que quede un poco más claro) es nulo, básicamente se ignora* y todas las filas pasan esa parte del filtro, ya sea que el valor de la columna sea nulo o no. Si param2 es no nulo entonces el is null verifique que falle y solo las filas con valores de columna (no nulos) que coincidan con param2 el valor cumple con esa parte del filtro.

* Condiciones en un or se puede evaluar en cualquier orden; poner el is null marcar primero no significa necesariamente el like no se evaluará, pero el optimizador es bastante inteligente con ese tipo de cosas