Oracle
 sql >> Base de données >  >> RDS >> Oracle

Curieux problème avec Oracle UNION et ORDER BY

Cela ne répond pas vraiment à la question, mais cela semble être un bogue de l'analyseur (ou une "fonctionnalité") plutôt qu'une exigence linguistique.

Selon My Oracle Support, cela semble avoir été signalé comme le bogue 14196463 mais fermé sans résolution. Il est également mentionné dans le fil de discussion 3561546. Vous avez besoin d'un compte MOS, ou au moins d'un compte Oracle, pour voir l'un ou l'autre.

Il a également été discuté dans un fil OTN qui nécessite une connexion Oracle de base plutôt qu'un compte MOS, pour autant que je sache. Cela ne contient pas non plus beaucoup d'informations, mais répète vos découvertes et suggère également que le comportement a existé au moins jusqu'à 9.2.0.8 et peut-être bien avant.

La documentation est un peu vague mais n'indique pas que cela devrait être un problème :

Pour les requêtes composées contenant des opérateurs d'ensemble UNION , INTERSECT , MINUS , ou UNION ALL , le ORDER BY La clause doit spécifier des positions ou des alias plutôt que des expressions explicites. De plus, le ORDER BY La clause ne peut apparaître que dans la dernière requête de composant. Le ORDER BY la clause ordonne toutes les lignes renvoyées par la requête composée entière.

Vous créez un alias pour votre expression et vous l'utilisez, et cela ne dit pas que vous devez créer un alias pour des composants particuliers (bien que cela ne dise bien sûr pas que vous ne le faites pas doivent soit).

Le comportement semble incompatible avec la validité de l'alias pour la projection finale, et la règle habituelle selon laquelle l'alias n'est valide que dans la clause order by - cela semble tomber quelque part entre les deux.