sql >> Base de Datos >  >> RDS >> Oracle

Problema curioso con Oracle UNION y ORDER BY

Esto realmente no responde a la pregunta, pero parece ser un error del analizador (o 'característica') en lugar de un requisito de idioma.

Según My Oracle Support, parece que esto se planteó como error 14196463 pero se cerró sin resolución. También se menciona en el hilo de la comunidad 3561546. Sin embargo, necesita una cuenta de MOS, o al menos una cuenta de Oracle, para ver cualquiera de ellos.

También se ha discutido en un hilo OTN que requiere un inicio de sesión básico de Oracle en lugar de una cuenta MOS, por lo que puedo decir. Eso tampoco tiene mucha información, pero repite sus hallazgos y también sugiere que el comportamiento ha existido al menos hasta 9.2.0.8 y quizás mucho antes.

La documentación es un poco vaga, pero no indica que esto sea un problema:

Para consultas compuestas que contienen operadores de conjuntos UNION , INTERSECT , MINUS , o UNION ALL , el ORDER BY La cláusula debe especificar posiciones o alias en lugar de expresiones explícitas. Además, el ORDER BY La cláusula solo puede aparecer en la consulta del último componente. El ORDER BY La cláusula ordena todas las filas devueltas por la consulta compuesta completa.

Está creando un alias de su expresión y usándolo, y no dice que tenga que crear un alias de componentes particulares (aunque, por supuesto, no dice que no tiene que hacerlo).

El comportamiento parece inconsistente con que el alias sea válido para la proyección final, y la regla habitual de que el alias solo sea válido en la cláusula order by - esto parece estar cayendo en algún punto intermedio.