|
|
|
lead c where
|
|||
|---|---|---|---|
|
#18+
Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. выдает ошибку: ORA-01722: неверное число. Если убираю последний where, ошибки нет. Также ошибки нет, если убрать lead. Что не так в запросе, как разрешить ситуацию? Причем, в where вызывает ошибку обращение к w1 или w2. Полное сообщение об ошибке: ORA-12801: ошибка в сервере P008 параллельного запроса ORA-01722: неверное число 12801. 00000 - "error signaled in parallel query server %s" *Cause: A parallel query server reached an exception condition. *Action: Check the following error message for the cause, and consult your error manual for the appropriate action. *Comment: This error can be turned off with event 10397, in which case the server's actual error is signaled instead. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 08:52 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, w1 у тебя - строка. Вот и сравнивай со строкой, а не с числом... Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 08:59 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
а как же Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:13 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, убери последний where, но оставь LEAD, и выполни полный фетч результата запроса. Ошибка есть или нет? убери LEAD, но оставь последний where, и выполни полный фетч результата запроса. Ошибка есть или нет? Возможно, без LEAD-а или WHERE запрос при НЕполном фетче просто не успевает дойти до проблемных данных. Выплевывает тебе первую порцию "нормальных" данных и затихает... добавление в запрос LEAD-а или WHERE - меняет план запроса и проблемные данные успевают подтянуться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:27 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
я все урезал до одной строки (дополнительные условия к году). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:41 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, За качество данных ручаешься? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:41 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
env, Изменение плана при устранении WINDOW также можно на этом кейсе посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:46 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
план без lead, с where и раскоментированным union all 11.2.0.4 Код: 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. Очаровательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 09:57 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
envЗа качество данных ручаешься? Всех данных? Конечно, не ручаюсь - их достаточно много, чтобы все глазами просмотреть. Но я вывожу запросом одну строку (формально две так как используется lead). Эту строку я вижу - ничего особенного. w1 и w2 отформатированы как числа (выравнены вправо). Могу вывести строку со следующей пустой (null). Значения null обрабатываются как обычно и с тем же результатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:07 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, Как ты не поймешь. Дело не в том, сколько и каких строк попадает в итоговую выборку. Дело в том - сколько и каких строк, а главное - в каком "физическом" порядке - обрабатывается ДО того, как вернуть тебе в выборку твои две строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:14 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000Конечно, не ручаюсь - их достаточно много, чтобы все глазами просмотретьНичего, привыкай. Тренируй глаза. Я вот уже поднаторел, за час миллион строк глазками просмотреть успеваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:19 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
Давайте разберем досканально: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Этот запрос работает - результат 1 строка. Фактически верхний селект в данном случае лишний. Но мне надо выбрать из этого результата значения с w1>0 (не важно будет возвращена строка или нет). Ставлю условие where w1>0: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Получаю ошибку. Я предполагаю, что оракл сначала выполняет подзапрос, а потом к результату применяет условие выборки. Разве я не прав? Ведь условие выборки зависит от преобразований подзапроса. w1 можно заменить на ord ошибка исчезает - все работает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Непонятно почему не могу использовать w1 или w2 без ошибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:27 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000а потом к результату применяет условие выборки. Разве я не прав? Не прав. Посмотри на план, получившийся для примера. Предикат мало того, что протолкнут внутрь, так ещё и сразу выставлен по значениям. Оптимизатор порой бывает излишне умным. Покажи планы своих запросов для первых двух случаев. Если не знаешь как - ищи по dbms_xplan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:33 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
env Код: plsql 1. Очаровательно.Какая-то попытка оптимизации в зависимости от значения литерала. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Для варианта, когда в последней строке длина литерала больше Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:35 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000Также ошибки нет, если убрать lead Т,е. дать возможность оптимизатору протолкнуть все предикаты на самый низкий уровень. Твоя проблема возникает при проталкивании предиката по to_number(case ..) >0 ниже, чем предиката to_char(dat..) = ... . Что говорит о кривых данных в поле nw. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:39 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
env, *nw = wind_napr_t_txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:40 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, добавь уже rownum >= 0 во все WHERE всех подзапросов и спи себе дальше до следующего "взрыва".... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:42 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
envНе прав. Хорошо, пусть не прав. Может косяк в данных. Но есть два аргумента как бы против этой версии: 1. Убираю lead, ошибки нет, хотя данные остались те же - обрабатываются нормально. 2. условие с ord - данные те же обрабатываются нормально Есть и третий аргумент: Один из "противоречивых" скриптов должен выполняться, но оба дают ошибку: Код: sql 1. 2. 3. Код: sql 1. 2. 3. тут уже не важно какие данные. Или я снова не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 10:51 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000, Ну как по мне, ORA-01722: неверное число. - это из-за to_number( Посему предлагаю его упразнить Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. если нет данных типа .1 а есть типа 0.1 то все пройдет пучком ORA-01722 видел при конвертации разделителей чисел ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:13 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, Даже думаю стоит добавить Trim или Ltrim Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 11:23 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
dar3000Или я снова не прав? Ты просто не понял что тебе написали. Правота тут ни при чём. Для тупых нежелающих думать. На входе корзина с белыми кубиками, красными кубиками и красными шариками. Задача - впихнуть красные шарики из корзины в круглое отверстие. Варианты: 0. Выбрать всё красное, начать впихивать, упасть с ошибкой на невпихуемости в отверстие. (твой случай) 1. Выбрать все шарики - надо же, впихиваются! Проверить на красноту. 2. Выбрать шарики, проверить на красноту, впихнуть в отверстие. 3. ..... Каждый из этих вариантов - стадия применения шага FILTER. dar3000Может косяк в данных. Но есть два аргумента как бы против этой версии Есть только один аргумент против этой версии - проверить данные. Если есть хотя бы одно данное, нарушающее формат - прибивать гвоздями предикаты или навешивать дополнительные условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:47 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
env, я тупой select * from t where par_type='N' and par_value=132 гарантірую что для par_type='N' par_value токо чісла от плана завісіт .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 12:57 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
Stax, зачем ты все время меняешь раскладку, когда пишешь? не удобно же читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:08 |
|
||
|
lead c where
|
|||
|---|---|---|---|
|
#18+
Stax, В случае ТС, в зависимости от возможности протолкнуть предикат, твой запрос превращается в Код: plsql 1. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:16 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=131&tid=1884662]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 415ms |

| 0 / 0 |
