Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Seltsames Verhalten von Full Outer Join in Oracle - wie könnte es erklärt werden?

Der Optimierer sollte sich nicht dafür entscheiden, den Index auf EMP.DEPT_ID in der zweiten Abfrage zu verwenden, da er NULL-Werte haben kann. Dies führt dazu, dass eine Zeile aus den Ergebnissen ausgeschlossen wird.

Die einzige Nicht-Fehler-Erklärung, die mir im Moment einfällt, ist, dass Sie irgendwie Einschränkungen im DISABLE RELY-Modus erstellt haben, sodass der Optimierer denkt, dass das Feld keine NULL-Werte enthalten kann. In diesem Fall wäre es richtig, den Index zu verwenden, wenn die falschen Informationen in den Einschränkungen gegeben sind. Es scheint jedoch, dass die RELY-Option für NOT NULL-Einschränkungen nicht verfügbar ist, daher sehe ich nicht, wie dies das Problem sein könnte. Sehen Sie sich dennoch alle Beschränkungen für die Tabellen genau an.

Abgesehen davon gibt es auf der Website von Oracle eine überraschende Anzahl von Fehlern in Bezug auf falsche Ergebnisse von vollständigen äußeren Joins. Vielleicht triffst du einen von ihnen. In einigen dieser Fälle besteht die Problemumgehung darin, "native" Full Outer Joins zu deaktivieren, was Sie für Ihre aktuelle Sitzung mit dieser Anweisung tun können:

alter session set "_optimizer_native_full_outer_join"=off;