Задача 101.50898

Задача :101.50898

Краткое описание :
перенести решения проблем 101.50524, 101.50890 в атлантис 5.5
Описание :
Прямой SQL
Что измененно :


DSQL
Oracle

----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
Не работает order by во вложенном подзапросе на DSQL
Неправильно работает TOP + ORDER BY на оракле, если для ORDER BY нет индекса



Как измененно :

TOP исправлен по аналогии с поведением MSSQL:
Если во фразе нет UNION, то сначала срабатывает ORDER BY, потом только TOP
Если во фразе есть UNION и в конце ORDER BY, то для тех его частей, где есть TOP,
он срабатывает сперва и с неопределенным порядком сортировки, потом срабатывает UNION
и последним срабатывает ORDER BY всего UNION'а целиком.

!На oracle не работает TOP + ORDER BY в скоррелированном подзапросе
(INLINE VIEW или SCALAR SUBQUERY, в котором упомянуты поля внешнего запроса)
!На postgre пока что не работает TOP + UNION

Предупреждение! ORDER BY в подзапросе обычно бессмысленно.
sql select * from (select * from OBOROT order by DATOB);
В этом примере порядок записей будет произвольный!
Внутренняя сортировка не сохранится. Важен только самый внешний ORDER BY
На MSSQL пример откажется выполняться, на oracle выполнится с КАКИМ-ТО порядком.

Единственно, когда это имеет смысл -- совместно с TOP (но без UNION)
sql select * from (select top 5 * from OBOROT order by DATOB);


Название продукта Название компонента Тип Последняя версия Дата выхода
compdataCOMPDATARES5.5.13.0
ora90drvORA90DRVDLL5.5.13.0