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

Abfragen mit Outer Joins verhalten sich in Oracle 12c anders

AKTUALISIERUNG: Dies wurde in 12.1.0.2 behoben.

Das sieht definitiv nach einem Fehler in 12.1.0.1 aus. Ich würde Sie ermutigen, eine Serviceanfrage über den Oracle-Support zu erstellen. Sie könnten in der Lage sein, eine Lösung oder eine bessere Problemumgehung zu finden. Und hoffentlich kann Oracle es in einer zukünftigen Version für alle beheben. Normalerweise ist das Schlimmste an der Arbeit mit dem Support, das Problem zu reproduzieren. Aber da Sie bereits einen sehr guten Testfall haben, kann dieses Problem leicht gelöst werden.

Es gibt wahrscheinlich viele Möglichkeiten, diesen Fehler zu umgehen. Aber es ist schwer zu sagen, welche Methode immer funktioniert. Ihre neu geschriebene Abfrage funktioniert möglicherweise jetzt, aber wenn sich die Optimiererstatistiken ändern, ändert sich der Plan möglicherweise in der Zukunft.

Eine andere Option, die für mich unter 12.1.0.1.0 funktioniert, ist:

ALTER SESSION SET optimizer_features_enable='11.2.0.3';

Aber Sie müssen daran denken, diese Einstellung immer zu ändern, bevor die Abfrage ausgeführt wird, und sie danach wieder auf „12.1.0.1“ zu ändern. Es gibt Möglichkeiten, dies in einen Abfragehinweis einzubetten, z. B. /*+ OPT_PARAM('optimizer_features_enable' '11.2.0.3') */ . Aber aus irgendeinem Grund funktioniert das hier nicht. Oder vielleicht können Sie das vorübergehend für das gesamte System festlegen und es wieder ändern, nachdem eine Lösung oder eine bessere Problemumgehung verfügbar ist.

Unabhängig davon, welche Lösung Sie verwenden, denken Sie daran, sie zu dokumentieren. Wenn eine Abfrage seltsam aussieht, kann der nächste Entwickler versuchen, sie zu "reparieren" und auf dasselbe Problem stoßen.