salut à tous,
je cherche une explication à un résultat de requête.
J'ai la requête suivante (simplifiée)
select valeur1, valeur2
from ma_table mt1
where valeur1 like 'A%'
and not exists (select 1
from ma_table2 mt2
where mt2.valeur1 = mt1.valeur1
and mon_pack.fonction = 'O')
Mon problème est qu'une requête de ce type ne ramène pas le même résultat entre Oracle 9 et Oracle 10.
Ce qui pose problème est l'appel à une fonction packagée dans le NOT EXISTS.
Avec Oracle 10 (10.2.0.3), si mon_pack.ma_fonction ramène 'O', alors il n'y a pas de problème, j'ai le résultat escompté.
Par contre, si mon_pack.ma_fonction ramène toute autre valeur, dans tous les cas, la requête ne ramènera rien, c'est comme si la clause sur mon_pack.ma_fonction se trouvait au niveau supérieur et pas dans le sous select.
J'ai résolu le problème en réécrivant la requête de la façon suivante :
select valeur1, valeur2
from ma_table mt1
where valeur1 like 'A%'
and not exists (select 1
from ma_table2 mt2, dual
where mt2.valeur1 = mt1.valeur1
and mon_pack.fonction = 'O')
En un sens cette syntaxe paraît logique, on utilise la table dual pour éxécuter la fonction. Néanmoins je suis surpris de la différence d'interprétation entre Oracle 9i et Oracle 10g.
En espérant avoir été clair, si quelqu'un a une explication??
Merci.
---------------
l'ours bleu