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

Comportement étrange de la jointure externe complète dans Oracle - comment cela pourrait-il être expliqué?

L'optimiseur ne doit pas choisir d'utiliser l'index sur EMP.DEPT_ID dans la deuxième requête, car il peut avoir des valeurs NULL. C'est ce qui l'amène à exclure une ligne des résultats.

La seule explication non liée à un bogue à laquelle je peux penser pour le moment est que vous avez en quelque sorte créé des contraintes en mode DISABLE RELY afin que l'optimiseur pense que le champ ne peut pas contenir de valeurs NULL. Dans ce cas, il serait correct d'utiliser l'indice étant donné les informations incorrectes dans les contraintes. Cependant, il semble que l'option RELY ne soit pas disponible pour les contraintes NOT NULL, donc je ne vois pas comment cela pourrait être le problème. Néanmoins, examinez attentivement toutes les contraintes sur les tables.

Cela mis à part, il existe un nombre surprenant de bogues sur le site d'Oracle concernant les résultats erronés des jointures externes complètes. Vous êtes peut-être en train de toucher l'un d'eux. Dans un certain nombre de ces cas, la solution consiste à désactiver les jointures externes complètes "natives", ce que vous pouvez faire pour votre session en cours avec cette instruction :

alter session set "_optimizer_native_full_outer_join"=off;