powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Может ли UNION влиять на WITH?
13 сообщений из 13, страница 1 из 1
Может ли UNION влиять на WITH?
    #39298374
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею запрос такой структуры

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH src AS
(
    SELECT ... FROM table t1
    JOIN XMLTABLE(....) xt1 ON ...
    LEFT JOIN table2 t2 ON ...
    LEFT JOIN table3 t3 ON ...
)

SELECT * FROM src
UNION ALL SELECT * FROM src



Я всегда полагал, что WITH выполняется перед выполнением основного запроса и его результаты вообще никак не могут изменяться от того, как он дальше используется.
Если в теле основного запроса оставить только один селект, то все как и должно быть - выдается просто все, что выбралось в WITH.
Если добавить "UNION ALL SELECT * FROM src", то я ожидаю получить просто 2 набора одинаковых строк из WITH, а по факту значения в строках меняются. Т.е. меняются результаты, которые выдает WITH. Например, "LEFT JOIN table3 ..." начинает выдавать другие значения. Если убрать из WITH "JOIN XMLTABLE(....)", то результаты снова становятся такими, какими должны быть. Такое поведение хоть каким-то механизмом описывается?
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298390
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C00LM4NТакое поведение хоть каким-то механизмом описывается?BUG nnnnnnnn
Упрощай, заменяя ANSI на NATIVE.
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298518
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(+) ничего не изменил, к сожалению
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298531
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще нашел странность
Как писал выше, без UNION запрос выдает верные данные.
Но если при этом добавить /*+ MATERIALIZE */ в WITH, то данные становятся такими же кривыми, как и с UNION.
Могу догадываться, что при использовании UNION субд без хинта выполняет материализацию.
Тогда вопрос - каким макаром она может влиять на результаты внутри WITH?
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298533
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C00LM4N(+) ничего не изменил, к сожалению
хинт materialize даст вам это:
Я всегда полагал, что WITH выполняется перед выполнением основного запроса
но от чудес ansi синтаксиса внутри with кляузы (и снаружи) гарантий н э т
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298547
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел по плану запроса. Действительно, с /*+ MATERIALIZE */ и одним простым селектом план запроса почти такой же, как и без /*+ MATERIALIZE */, но с UNION. Т.е. при добавлении UNION субд делает материализацию, видать оптимизация такая. Соответственно, кост при правильных результатах без материализации ~4500, а при неправильных с явной или неявной материализацией - ~46000.
Вопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит?
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298578
arlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C00LM4NВопрос - можно ли заставить не делать материализацию, раз она каким-то макаром гадит?

хинт inline
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298751
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нагуглил быстрее )
Действительно, проблема уходит при добавлении данного хинта.
Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно (
Остается только пробовать на 12 версии, вдруг пофиксили.
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298814
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C00LM4NНагуглил быстрее )
Действительно, проблема уходит при добавлении данного хинта.
Но запрос выполняется даже на не слишком большой базе теперь раз в 10 дольше. Похоже, без хранилища все это будет малоюзабельно (
Остается только пробовать на 12 версии, вдруг пофиксили.

Еще можно попробовать подбить план подзапроса к тому, где результаты правильные и оставить материализацию.. Скорее всего ведь не во время материализации данные портятся, а до.
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298834
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за идею.
Там запрос на 2000 строк. Умру сравнивать )) Если уж только совсем никак иначе.
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39298849
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C00LM4NТам запрос на 2000 строкБыдло-индусо-код? Или EAV, отягощённый неструктурированным XML-ем?
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39299034
C00LM4N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее первое.
Отчет с кучей полей. Под каждое поле свой джоин (с джоинами внутри) со своими фильтрами.
Таблицы одни и те же внутри джоинов, но завязывать поля между собой не рекомендуется, т.к. в любой момент может потребоваться изменить фильтры какого-то из полей.
Но, возможно, я не знаю каких либо шаблонов, которые позволяют делать такие вещи красиво и более оптимизированно?
...
Рейтинг: 0 / 0
Может ли UNION влиять на WITH?
    #39299098
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C00LM4NПод каждое поле свой джоин (с джоинами внутри) со своими фильтрами.
Таблицы одни и те же внутри джоиновТаки второе. И за него такая расплата.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Может ли UNION влиять на WITH?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]