Oracle
 sql >> база данни >  >> RDS >> Oracle

Любопитен проблем с Oracle UNION и ORDER BY

Това всъщност не отговаря на въпроса, но изглежда е грешка в анализатора (или „функция“), а не изискване за език.

Според My Oracle Support, това изглежда е повдигнато като грешка 14196463, но е затворено без решение. Също така се споменава в нишка на общността 3561546. Трябва ви MOS акаунт или поне акаунт в Oracle, за да видите някой от тях.

Това също беше обсъдено в OTN тема, която изисква основно влизане в Oracle, а не MOS акаунт, доколкото мога да преценя. Това също няма много информация, но повтаря вашите открития и също така предполага, че поведението е съществувало поне до 9.2.0.8 и може би много по-рано.

Документацията е малко неясна, но не показва, че това се очаква да е проблем:

За сложни заявки, съдържащи оператори за набор UNION , INTERSECT , MINUS , или UNION ALL , ORDER BY клаузата трябва да указва позиции или псевдоними, а не изрични изрази. Също така, ORDER BY клаузата може да се появи само в последната заявка за компонент. ORDER BY клаузата подрежда всички редове, върнати от цялата съставна заявка.

Вие създавате псевдоним на израза си и го използвате и това не казва, че трябва да създавате псевдоним на определени компоненти (въпреки че, разбира се, не казва, че не трябва или едно от двете).

Поведението изглежда несъвместимо с псевдонима, който е валиден за окончателната проекция, и обичайното правило за това, че псевдонимът е валиден само в клауза за подреждане – изглежда, че пада някъде по средата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Това е в подробностите

  2. Как да получите вчерашна дата в Oracle

  3. Конкатениране и групиране на множество редове в Oracle

  4. Обръщане на низ Word по Word с помощта на SQL

  5. Как да активирате режима на архивен дневник в Oracle Database 19c