|
|
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Версия 12.2.0.1.0 Enterprise Edition Запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. План Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Возвращает результат 5046 5342 5046 5342 5342 ... 5342 Правильно 5342 Как посмотреть почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 13:59 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
На order by внутри with рассчитывать нельзя. Oracle просто поменял алгоритм в 12.2, пользуя PGA вместо temp и случайная сортировка потерялась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 14:24 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
wurdu, Убрал сортировки - результат не изменился Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 14:42 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Sergey_Korolev, так тут вся логика рассчитана на порядок строк, который ничем не гарантируется. Тут наверное логично использовать ROW_NUMBER() OVER (ORDER BY node_id) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:00 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Sergey_Korolevwurdu, Убрал сортировки - результат не изменился Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. убрав сортировки Вы разрушите логику запроса імхо, какой-то странный алгоритм (CASE) ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:05 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Stax, Данные берутся из индекса см план выше Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Можно без ORDER BY node_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:17 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
wurdu, по любому что-то не так WHERE rr = 1 должен вернуть одну строку імхо так замысловато они ищут "дырку" (сбой нумерации node_id) .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:22 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
wurdu, С (ROW_NUMBER() OVER (ORDER BY node_id) работает верно Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Есть описание этой ошибки ? Появилась в 12.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:29 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:31 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Sergey_KorolevошибкиНе стоит чрезмерно усложнять решение примитивной задачи и соберешь меньше граблей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:46 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Sergey_KorolevStax, Данные берутся из индекса см план выше Можно без ORDER BY node_id імхо так нельзя делать, оракля поменяет план, возьмет не из индекса, тогда беда меня смещает другое, WHERE rr = 1 запрос должен вернуть 1строку, а возвращает несколько или я что-то не понимаю? ps Order by in WITH clause is not preserved считаю багой и должны исправить .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:47 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
123йй, Да, Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:47 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
-2-, возможно решить можно и по другому (напр lag/lead) но фича (with order by) может выстрелить в других задачах ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2018, 15:51 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
Sergey_Korolev, Один запрос: Код: plsql 1. 2. 3. 4. 5. Второй запрос: Код: plsql 1. Для второго запроса bb является структурой организованной в виде кучи, никаких обязательств по сохранению сортировки bb второй запрос не несет, поэтому применять rownum для нумерации отсортированной выборки так нельзя. Можно так: Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2018, 13:37 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorДля второго запроса bb является структурой организованной в виде кучиwith декларируется как имя подзапроса и по сути является динамическим create view. "Структурой, организованной в виде" подзапрос становится или не становится по хотению оптимизатора. Но даже, если предположить, что with весь из себя куче рявый, это не объясняет несколько строк результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2018, 14:18 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
[quot -2-]SkilledJuniorэто не объясняет несколько строк результата. Код: plsql 1. Код: plsql 1. Код: plsql 1. rownum полученный на неотсортированной по node_id выборке превращает данный алгоритм в морской бой - попал/не попал, сколько раз попал ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2018, 15:35 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
SkilledJuniorrownum полученный на неотсортированной ...Наложено условие rownum = 1 и поверх этого нет джоинов и других размножателей, результат должен быть одна строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2018, 15:42 |
|
||
|
12.2 Запрос возвращает разные значения! в плане CURSOR DURATION MEMORY
|
|||
|---|---|---|---|
|
#18+
-2-Наложено условие rownum = 1 и поверх этого нет джоинов и других размножателей, результат должен быть одна строка. У тс-а зачем то .* в запросах, полагаю перед тем как выложить запрос он удалял лишнее по его мнению, исходный запрос скорее всего выглядит несколько иначе, понять что происходит можно при наличии полного "неправильно" работающего запроса и данных на которых он "сломался". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2018, 15:47 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39713557&tid=1883367]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
160ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 490ms |

| 0 / 0 |
