To tak naprawdę nie odpowiada na pytanie, ale wydaje się, że jest to błąd parsera (lub „funkcja”), a nie wymaganie językowe.
Według My Oracle Support, wydaje się, że problem ten został zgłoszony jako błąd 14196463, ale został zamknięty bez rozwiązania. Jest to również wspomniane w wątku społeczności 3561546. Potrzebujesz konta MOS lub przynajmniej konta Oracle, aby zobaczyć którekolwiek z nich.
Zostało to również omówione w wątku OTN, który wymaga podstawowego loginu Oracle zamiast konta MOS, o ile wiem. To również nie zawiera wielu informacji, ale powtarza twoje odkrycia, a także sugeruje, że zachowanie istniało co najmniej do wersji 9.2.0.8, a być może znacznie wcześniej.
Dokumentacja jest nieco niejasna, ale nie wskazuje, że może to stanowić problem:
Dla zapytań złożonych zawierających operatory zestawów UNION
, INTERSECT
, MINUS
lub UNION ALL
, ORDER BY
klauzula musi określać pozycje lub aliasy, a nie wyrażenia jawne. Ponadto ORDER BY
klauzula może pojawić się tylko w ostatnim zapytaniu składowym. ORDER BY
klauzula porządkuje wszystkie wiersze zwrócone przez całe zapytanie złożone.
Tworzysz aliasy w swoim wyrażeniu i używasz tego, co nie mówi, że musisz aliasować poszczególne składniki (chociaż oczywiście nie mówi, że nie albo).
Zachowanie wydaje się niezgodne z aliasem ważnym dla ostatecznej projekcji i zwykłą zasadą, że alias jest ważny tylko w kolejności klauzuli - wydaje się, że spada gdzieś pomiędzy.