Angenommen, Sie haben eine PL/SQL
Funktion, die einen zufälligen Wert zurückgibt, den Sie in einer SQL sentence
sowohl als zurückgegebene Daten als auch in der Order by
Klausel verwenden.Oracle SQL: Wenn ich eine Funktion sowohl als ein Feld als auch in der Reihenfolge verwendet, wird es erneut ausgewertet?
Nun könnte man die Order by
Klausel in drei "andere" Art und Weise schreiben:
von Index
Select Foo,
MyFunction(Foo) orderField
From FooTable
Order By 2
Mit "wieder" die Funktion
Select Foo,
MyFunction(Foo) orderField
From FooTable
Order By MyFunction(Foo)
Aufruf Durch Verwendung des Auftragsfeldalias
Select Foo,
MyFunction(Foo) orderField
From FooTable
Order By orderField
Der dritte Weg ist möglich, da die Order By
Klausel die letzte der select werden analysiert und dann Oracle bereits kennt den Alias.
Meine Frage ist, gibt es einen Unterschied in der Verarbeitung oder Leistung dieser drei Abfragen? Würde der zweite Schritt bedeuten, dass der Anruf erneut ausgewertet wird?
Ich habe versucht, durch die Suche über die Dokumentation, um herauszufinden, und durch einige Anfragen von Toad sowie mit einem Blick auf den explain plan
laufen, aber konnte keinen signifikanten Unterschied bisher finden.
Meine Oracle-Version ist 11.2.0.3.0, wenn das in irgendeiner Weise wichtig ist.
Kann es vielleicht davon abhängen, ob die Funktion deterministisch ist oder nicht? (Wie auch immer, Spaltenalias ist mein Favorit.) – jarlh
@jarlh, könnte gut sein. Ich bin gespannt ob jemand die Antwort kennt :-) –