sql >> Databasteknik >  >> RDS >> Oracle

Nyfiken problem med Oracle UNION och ORDER BY

Detta svarar inte riktigt på frågan, men det verkar vara ett parserfel (eller "funktion") snarare än ett språkkrav.

Enligt My Oracle Support verkar detta ha tagits upp som bugg 14196463 men stängt utan upplösning. Det nämns också i community-tråden 3561546. Du behöver ett MOS-konto, eller åtminstone ett Oracle-konto, för att se någon av dessa dock.

Det har också diskuterats i en OTN-tråd som kräver en grundläggande Oracle-inloggning snarare än ett MOS-konto, så vitt jag kan säga. Det har inte heller mycket information men upprepar dina upptäckter och antyder också att beteendet har funnits tillbaka åtminstone till 9.2.0.8 och kanske mycket tidigare.

Dokumentationen är lite vag men indikerar inte att detta förväntas vara ett problem:

För sammansatta frågor som innehåller setoperatorer UNION , INTERSECT , MINUS , eller UNION ALL , ORDER BY sats måste ange positioner eller alias snarare än explicita uttryck. Även ORDER BY sats kan endast visas i den sista komponentfrågan. ORDER BY klausulen ordnar alla rader som returneras av hela den sammansatta frågan.

Du aliaserar ditt uttryck och använder det, och det står inte att du måste aliasa vissa komponenter (även om det naturligtvis inte står att du inte måste antingen).

Beteendet verkar inkonsekvent med att aliaset är giltigt för den slutliga projektionen, och den vanliga regeln om att aliaset endast är giltigt i ordningsföljd - detta verkar falla ner någonstans däremellan.



  1. Hur uppdaterar jag om det finns, infogar om inte (AKA upsert or merge) i MySQL?

  2. Apache Spark ODBC-drivrutinen

  3. Hämta lista över alla noll- och inte-nollkolumner i SQL Server-databasen - SQL Server / T-SQL självstudie del 53

  4. Hur man kontrollerar versionen av Oracle Provider för ole-db. OraOLEDB.Oracle-leverantör