Oracle
 sql >> Database >  >> RDS >> Oracle

Curioso problema con Oracle UNION e ORDER BY

Questo non risponde davvero alla domanda, ma sembra essere un bug del parser (o 'funzione') piuttosto che un requisito della lingua.

Secondo My Oracle Support, questo sembra essere stato sollevato come bug 14196463 ma chiuso senza risoluzione. È menzionato anche nel thread della community 3561546. Tuttavia, per visualizzare uno di questi è necessario un account MOS, o almeno un account Oracle.

È stato anche discusso in un thread OTN che richiede un accesso Oracle di base anziché un account MOS, per quanto ne so. Anche questo non ha molte informazioni ma ripete le tue scoperte e suggerisce anche che il comportamento è esistito almeno fino alla 9.2.0.8 e forse molto prima.

La documentazione è un po' vaga ma non indica che questo dovrebbe essere un problema:

Per query composte contenenti operatori di insiemi UNION , INTERSECT , MINUS o UNION ALL , il ORDER BY La clausola deve specificare posizioni o alias piuttosto che espressioni esplicite. Inoltre, il ORDER BY la clausola può apparire solo nell'ultima query del componente. Il ORDER BY la clausola ordina tutte le righe restituite dall'intera query composta.

Stai aliasando la tua espressione e usando quella, e non dice che devi alias componenti particolari (anche se ovviamente non dice che non devono essere entrambi).

Il comportamento sembra incoerente con l'alias valido per la proiezione finale e la solita regola sull'alias valido solo nell'ordine per clausola - questo sembra cadere da qualche parte nel mezzo.