Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Problema curioso com Oracle UNION e ORDER BY


Isso realmente não responde à pergunta, mas parece ser um bug do analisador (ou 'recurso') em vez de um requisito de idioma.

De acordo com o My Oracle Support, isso parece ter sido levantado como bug 14196463, mas fechado sem resolução. Também é mencionado no tópico da comunidade 3561546. Você precisa de uma conta MOS, ou pelo menos uma conta Oracle, para ver qualquer um deles.

Também foi discutido em um thread OTN que requer um login básico do Oracle em vez de uma conta MOS, até onde posso dizer. Isso também não tem muita informação, mas repete suas descobertas e também sugere que o comportamento existia pelo menos até 9.2.0.8 e talvez muito antes.

A documentação é um pouco vaga, mas não indica que isso seja um problema:

Para consultas compostas contendo operadores de conjunto UNION , INTERSECT , MINUS , ou UNION ALL , o ORDER BY cláusula deve especificar posições ou aliases em vez de expressões explícitas. Além disso, o ORDER BY cláusula pode aparecer apenas na última consulta do componente. O ORDER BY A cláusula ordena todas as linhas retornadas por toda a consulta composta.

Você está usando o alias da sua expressão e isso não diz que você precisa usar o alias de componentes específicos (embora, é claro, não diga que você não tem que qualquer um).

O comportamento parece inconsistente com o alias sendo válido para a projeção final, e a regra usual sobre o alias ser válido apenas na ordem por cláusula - isso parece estar caindo em algum lugar no meio.