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

Wann liefert eine korrekte SQL ein falsches Ergebnis?

Sie können zum Beispiel den in Oracle 10g eingeführten Hinweis NO_QUERY_TRANSFORMATION anwenden.

Wenn dies das gewünschte Ergebnis liefert, wissen Sie, dass Sie mit einem Oracle-Fehler konfrontiert sind, da kein Hinweis das tatsächliche Ergebnis einer Abfrage ändern sollte.

Gleichzeitig haben Sie möglicherweise Ihr Problem gelöst, außer dass Ihr Ausführungsplan möglicherweise nicht zufriedenstellend ist.

Der Fehler, mit dem Sie konfrontiert sind (ich weiß nicht, ob es sich um einen bekannten Fehler handelt), besteht darin, dass der Oracle-Optimierer die Absicht der ursprünglichen Abfrage möglicherweise nicht richtig interpretiert, wenn er die Abfrage für einen besseren Ausführungsplan umwandelt (Ansichten zusammenführen usw.). Indem Sie den Hinweis verwenden, weisen Sie den Optimierer an, dies nicht zu tun.

Das Phänomen tritt am häufigsten bei komplexen Abfragen mit Inline-Leistungsansichten auf.

Derzeit habe ich keine Codebeispiele, um dieses Problem zu reproduzieren, aber ich arbeite daran.

UPDATE:Es scheint, dass der Hinweis tatsächlich dafür gedacht ist - ich habe Folgendes gefunden:

Dokumentation .