|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
Добрый день! Есть огромный запрос в курсора в нём полно подзапросов. Вроде все имеют rownum = 1. Визуальнг поймать не могу - слишком большой запрос с подзапросами в подзапросах. Однако возникает ошибка ORA-01427:подзапрос одиночной строки возвращает более одной строки. Проблема ещё в том, что надо найти запись, на которой возникает ошибка. Мало исправить сам запрос - запись вероятно, не корректна в базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 10:55 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod Добрый день! Да такой себе день. mod Мало исправить сам запрос - запись вероятно, не корректна в базе. Можно только посочувствовать. Распиливайте мегазапрос на куски, разворачивайте, всё что можно развернуть и ищите, какая сволочь возвращает больше одной строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 11:32 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod, не выход, но я последовательно ставил min/max пока не пропадет ошибка накладно но ... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 12:18 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod, Разбивать запрос на куски и постепенно собирать их обратно. Возможно проблема возникает не на выборке в подзапросах как таковой, а, например, возникает перемножение на соединении отдельных кусков. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 12:48 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
Не распилить толком - много вложений. Первая мысль понятно что была эта. MiN, MAX rownum = 1 в подзапросах есть. Где нет - равенство по первыичному ключу и дублей быть не может из-за ограничений ключа. Вот думал что может у кого есть идеи как ещё. Запрос реально многостраничный (в смысле текста) и я в нём не вижу визуально где может быть проблема с подзапросом. Раз других идей нет, то ладно. . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 14:25 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod, еще как вариат если есть union all (напр текущая табл и архив) по смыслу запись одна или там или там, но мож что-то слетело и сущность в двох ипостасях оказалась .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 14:33 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod, если отчетик за период, менять диапазон напр есть группировка по годам, период с 2020 по 2021, вот и две записи идей много, но куры ... .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 14:48 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod, какая версия оракла? дело в том, что с какой-то из последних версий (я уже не помню с какой именно) оптимизатор стал разворачивать латералы с rownum: http://orasql.org/2019/02/16/lateral-view-decorrelationvw_dcl-causes-wrong-results-with-rownum/ http://orasql.org/2019/02/16/another-bug-with-lateral/ В таких случаях, надо запрещать lateral view decorrelation(DCL, хинт NO_DECORRELATE) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 15:25 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
xtender, Как я понял mod использует подзапросы в select list с которыми он по его мнению "успешно" борется добавляя ROWNUM = 1 очевидно не понимая что результат такого запроса не детерминирован и при тех же данных может дать другой результат при последующих выполнениях. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 15:49 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
SY xtender, Как я понял mod использует подзапросы в select list SY. необязательно напр where id_ref=(select id from par where par_name='X3' ... ) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 16:18 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
Stax необязательно напр where id_ref=(select id from par where par_name='X3' ... ) Суть дела не меняет. Может и from (select id from par where par_name='X3' and rownum = 1) Все равно результат такого подзапроса не детерминирован и при тех же данных может дать другой результат при последующих выполнениях. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:08 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
SY, в общем случае не детерминирован (если нет уникальной сортировки) но на практике rownum = 1 неприятная страховка, результат детерминирован и если две строки то что-то разрушено (как у мод) и надо разбиратся ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:19 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
по аналогичной причине, когда вижу дистинкт, всегда требую объяснений потому что всунут такую красоту в скалярный подзапрос, а через полгода прибегают с сабжем ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:30 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
andreymx, вместо дистинкт пусть юзают min/max реже прибегать будут ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2021, 18:37 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
mod Вот думал что может у кого есть идеи как ещё. Сжечь всё в пекле и найти новую работу. Запросы на тысячи строк невозможно нормально сопровождать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 04:53 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
crutchmaster mod Вот думал что может у кого есть идеи как ещё. Сжечь всё в пекле и найти новую работу. Запросы на тысячи строк невозможно нормально сопровождать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 08:31 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
crutchmaster, Если они генерятся по якорной модели, то других вариантов особо и не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 09:57 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
andreymx программы на три строчки не всегда эффективны Зато лаконичны и понятны. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 10:43 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
crutchmaster andreymx программы на три строчки не всегда эффективны Зато лаконичны и понятны. А три строки это только алгоритм, не считая вызовов и обработки ошибок ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 12:08 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
andreymx одна программа на 1000 строк часто проще, чем триста по три строки Вот в данном случае - не проще и с таким комком невозможно ничего сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 12:34 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
andreymx одна программа на 1000 строк часто проще, чем триста по три строки А три строки это только алгоритм, не считая вызовов и обработки ошибок Только с декларативным SQL дела обстоят несколько иначе чем с обычными процедурными/функциональными языками. Порой из запроса на несколько сот строчек можно веделить ключевое ядро (или даже несколько составных частей) и инкапсулировать куда-то, но тогда придется промежуточный результат грузить либо во времянку либо в коллекцию с вытекающими минусами (вероятно SQL Marco может вдохнуть новую жизнь в подобную декомпозицию). Кроме того, иногда логику из select list/where clause можно было бы потенциально инкупсулировать в UDF, но исторически разработчики боятся переключения контекста хоть оно с 12с уже может быть почти незаметным и на миллионах строк. Итого в именно SQL допустимы портянки на сотни строк из-за его специфики, но и это может быть улучшено [вендоро-специфичными плюшками]. PS. Отдельная песня insert all - тут бывает только перечислние полей нескольких толстых таблиц занимает сотни строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 13:49 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
году примерно в 2008-м решили один большой запрос разбить на несколько поменьше вместо одной большой процедуры получилось 7, каждая из которых была чуть поменьше оригинальной но стало действительно чуть понятнее ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 16:13 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
у меня в хозяйстве имеется один большой запрос. Раз в год-два ошибки данных вызывают 01427. Поиск методом половинного деления. пять-семь итераций и причина найдена. Раньше любил комменты /**/, теперь --. С минусами проще куски выпиливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 22:12 |
|
ORA-01427 как проанализировать программно?
|
|||
---|---|---|---|
#18+
Egoр у меня в хозяйстве имеется один большой запрос. Раз в год-два ошибки данных вызывают 01427. Поиск методом половинного деления. пять-семь итераций и причина найдена. Раньше любил комменты /**/, теперь --. С минусами проще куски выпиливать. я всегда сразу задаю постановщикам вопросы в таких случаях ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2021, 23:11 |
|
|
start [/forum/topic.php?fid=52&fpage=28&tid=1880527]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 403ms |
0 / 0 |