|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : août 2006 Messages : 137 ![]() |
Bonjour,
SELECT col1 AS col1s , col2 AS col2s, col3 AS col3s , col4 AS col4s, FROM matable WHERE col1 = nvl(15837, col1) AND col2 = nvl('DE0001040350', col2) AND col3 = nvl('ISIN', col3) AND col4 = nvl('WM', col4) AND REMAINING_ATTEMPTS > 0 AND (STATUS = nvl('NO_OCCURR', STATUS) OR STATUS = nvl('NO_OCCURR', STATUS) OR STATUS = nvl('NO_OCCURR', STATUS) OR STATUS = nvl('NO_OCCURR', STATUS) OR STATUS = nvl('NO_OCCURR', STATUS)); toutes les colonnes sont indexées col1,col2, col3, col4 mais comme vous le voyez , la fonction nvl empeche l’utilisation de ces indexes, quelqu’un a une idée, comment transformer le nvl ou la requete, pour qu’oracle voit ces indexex? Je ne sais pas si je peux aussi creer des indexes de focntions? Merci d’avance!!!! |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : août 2007 Messages : 176 ![]() |
Il faut passer par du sql dynamique et ne créer ta condition seulement si ton paramètre n'est pas nul
Code :
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Etes-vous sûr de la requête ? Une expression SQL n'a pas vraiment de sens car 'cccc' est un littéral (une valeur en 'dur') qui n'est donc jamais null au sens SQL ...
PS: Quelle est version d'Oracle ? Merci d'utiliser d'utiliser les balises pour l'affichage de code. |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : août 2006 Messages : 137 ![]() |
Bonjour à tous , je suis oracle 9ir2
mais je pense pifor que t’as raison , en fait cette requête je l’ai récupérée de la vue v$sqlarea, dont le but de l’optimiser, et la vraie écriture était blindée donc au lieu de ces valeurs en dure et fixe que j’ai données, il y avait :1 :2 :3 :4, mais est ce qu’on peut dire toujours que ça ne sera jamais nulle avec les binds variable ? Merci de votre reponse |
|
|
00
|
|
|
#5 | |
|
Membre actif
![]() Inscription : août 2007 Messages : 176 ![]() |
Citation:
Tu dois tester la valeur que tu vas passer dans ta bind variable en amont de l'exécution de ta requête comme je te l'ai indiqué dans ma réponse précédente |
|
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : août 2006 Messages : 137 ![]() |
Je vous remercie tous, en fait j'ai reglé le probleme, en interdidant sous le progrmme appelant java de ne faire rentrer que des valeurs not nulle, du coup le nvl(constante, colonne) =constante et le nvl ne servira a rien dans ce cas, alors je les ai dégagés et les indexes déjà existe seont exploitable et la requete est devenu optimisée, mille merci à vous tous pour vos explications.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com