DB2 Conditionnelle de la clause where
Je suis en utilisant DB2 v9
J'ai une procédure stockée avec des paramètres qui peuvent être transmis sous la forme d'une chaîne vide. Ici somer pseudocode pour ce que je suis en train de faire:
WHERE myColumn.name =
IF param1 = '' THEN
**disregard this param, all column values are eligible**
ELSE
myColumn.name = param1;
Fondamentalement, tout simplement ignorer le paramètre si c'est une chaîne vide. Sinon, appliquer un filtre dans la clause where. Est-ce possible de le faire dans DB2?
Vous devez vous connecter pour publier un commentaire.
WHERE 1=0 OR ...
)La réponse fournis par wildplasser est correct, mais il y a d'autres considérations qui peuvent utiles.
Tout d'abord, il pourrait être possible que la procédure stockée paramètre d'entrée contient une valeur NULL à la place de ". À l'aide de la FUSIONNER ou NULLIF fonctions de couvrir à la fois un NUL et aucune quantité d'espace vide:
Quand ce type de requête de recherche est compilé dans une procédure stockée, il aide générale, pour permettre REOPT TOUJOURS sur les instructions à l'intérieur de la procédure. Si vous ne le faites pas, les instructions SQL à l'intérieur de votre procédure stockée est toujours le même plan d'accès, quel que soit les paramètres d'entrée sont passés dans la procédure stockée lors de l'exécution. Permettre à l'optimiseur de réévaluer chaque instruction dans la procédure au moment de l'exécution fournira une bien meilleure chance de l'exploitation de l'index droit lorsque l'utilisateur effectue une recherche sur une colonne particulière.
Un autre mot Clé ici serait "SQL dynamique". Construire vos requêtes comme une chaîne de caractères et soit
EXECUTE IMMEDIATE
(pour la mise à JOUR, INSERTION ou DDL) ou utiliserPREPARE
/OPEN
/FETCH
(pour SÉLECTIONNER l').