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

Merkwürdiges Problem mit Oracle UNION und ORDER BY

Dies beantwortet die Frage nicht wirklich, aber es scheint eher ein Parser-Bug (oder "Feature") als eine Sprachanforderung zu sein.

Laut My Oracle Support scheint dies als Fehler 14196463 ausgelöst, aber ohne Lösung geschlossen worden zu sein. Es wird auch im Community-Thread 3561546 erwähnt. Sie benötigen jedoch ein MOS-Konto oder zumindest ein Oracle-Konto, um eines davon zu sehen.

Es wurde auch in einem OTN-Thread diskutiert, der, soweit ich das beurteilen kann, eher eine grundlegende Oracle-Anmeldung als ein MOS-Konto erfordert. Das enthält auch nicht viele Informationen, wiederholt aber Ihre Erkenntnisse und deutet auch darauf hin, dass das Verhalten mindestens bis 9.2.0.8 und vielleicht viel früher existiert hat.

Die Dokumentation ist etwas vage, weist aber nicht darauf hin, dass dies ein Problem sein dürfte:

Für zusammengesetzte Abfragen mit Mengenoperatoren UNION , INTERSECT , MINUS , oder UNION ALL , der ORDER BY -Klausel muss Positionen oder Aliase anstelle von expliziten Ausdrücken angeben. Auch der ORDER BY -Klausel kann nur in der letzten Komponentenabfrage erscheinen. Der ORDER BY -Klausel ordnet alle Zeilen an, die von der gesamten zusammengesetzten Abfrage zurückgegeben werden.

Sie aliasieren Ihren Ausdruck und verwenden das, und es heißt nicht, dass Sie bestimmte Komponenten aliasieren müssen (obwohl es natürlich nicht besagt, dass Sie nicht müssen beide).

Das Verhalten scheint inkonsistent zu sein, dass der Alias ​​für die endgültige Projektion gültig ist, und die übliche Regel, dass der Alias ​​nur in der order by-Klausel gültig ist – das scheint irgendwo dazwischen zu fallen.