Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utiliser comme '%' et faire correspondre les valeurs NULL avec NUMBER colonnes

On dirait que vous vous compliquez la vie. Laissez-les nuls, puis faites :

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

Si param1 (l'argument de la procédure ; la vie est plus simple lorsque vos noms de paramètre/variable et les noms de colonne sont différents... j'ai donc changé les noms de colonne pour le rendre un peu plus clair) est nul, il est fondamentalement ignoré* et toutes les lignes passent cette partie du filtre, que la valeur de la colonne soit nulle ou non nulle. Si param2 n'est pas null alors le is null vérifier cela échoue et seules les lignes avec des valeurs de colonne (non nulles) qui correspondent à param2 correspond à cette partie du filtre.

* Conditions dans un or peut être évalué dans n'importe quel ordre; mettre le is null vérifier d'abord ne signifie pas nécessairement le like ne sera pas évalué - mais l'optimiseur est assez intelligent pour ce genre de choses