Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Ciekawy problem z Oracle UNION i ORDER BY

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekazać argumenty do skryptu PL/SQL w wierszu poleceń za pomocą SQLPLUS?

  2. co dzieje się w fazie adop przygotuj

  3. Czy słowo kluczowe „as” jest wymagane w Oracle do zdefiniowania aliasu?

  4. Klastry zliczające SQL Oracle

  5. Jaki jest minimalny zasięg klienta wymagany do połączenia C# z bazą danych Oracle?