|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Всем привет! Перезаливаю базу измененными значениями за несколько лет (через update). Пару первых лет перезалил без проблем. А вот при обновлении текущего года выдает ошибку Ошибка ORA-01427: подзапрос одиночной строки возвращает более одной строки. Но таблица, которая формируется кодом для обновления - уникальна (если объединить все строки и попробовать найти дубликаты, то их не будет). Подскажите, пожалуйста, почему происходит такая ошибка при обновлении таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 20:25 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeпочему происходит такая ошибкаочевидно же ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 21:28 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Без конкретного запроса - "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 21:30 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMike, Ну так возьми запусти подзапрос и посмотри сколько и какие строки он возвращает. Это даст начальную информацию что пошло не так как "Пару первых лет". SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 21:32 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeПодскажите, пожалуйста, почему происходит такая ошибка при обновлении таблицы?Потому что автор - альтернативно одарённый хомо эректус. http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 07:43 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
SY, В этом и суть, что строки уникальные получаются. Вот сам код: update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=(select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount, sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3 WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2 where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount) where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS') and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05'); commit До даты в фильтре ошибку не выдавал, все обновлял успешно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 10:33 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeSY, Вот сам код: До даты в фильтре ошибку не выдавал, все обновлял успешно select t1.rowid,count(*) cc from --update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)= (select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount, sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3 WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2 ,dsbd_margin_trans t1 where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount) where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS') and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05'); group by t1.rowid having count(*)>1 что-то возвращает? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 10:51 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeсам кодЕсли на t.dt, t.grafnum, t.id_pos допускается несколько t.id_saler, то может получиться несколько строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 10:54 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Stax, Возвращает 2 ошибки: - столбец определен неоднозначно - неверно предложение на языке SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 10:55 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeВ этом и суть, что строки уникальные получаются.Заблуждаешься. IronMike Код: plsql 1. 2.
Два продавца до поры до времени сидели в засаде, а потом устроили подлянку говнокоду, продав на одинаковую сумму. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 10:58 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Elic, Да не, я запускал подзапрос, выгружал его в Excel, и соединял строки по этим 4-м критериям: ни одной повторяющейся не было ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:02 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeДа не, я запускал подзапрос, выгружал его в Excel, и соединял строки по этим 4-м критериям: ни одной повторяющейся не былоElicЗаблуждаешься. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:02 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Stax, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Досадная опечатка о которой не догадался автор сего поста. С глубоким уважением к Stax. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:09 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeStax, Возвращает 2 ошибки: - столбец определен неоднозначно - неверно предложение на языке SQL добавте нужный алиас Вам надо селестом повторить update (найти где возвращает более одной строки.) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:18 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeВ этом и суть, что строки уникальные получаются. Чудес не бывает. IronMikeupdate dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=(select MDR,id_saler from ( Отделите select от update и проверьте. Есть волшебные средства PL/SQL Beautifier. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:23 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IgorSm, недоглядел ; но сути не меняет, надо повторить логику update .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 11:28 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IgorSm, здесь тоже какие-то опечатки есть - выдает аналогичную ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:17 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeIgorSm, здесь тоже какие-то опечатки есть - выдает аналогичную ошибку надо акуратненько избавится от ошибок типа select r,count(*) cc from --update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)= (select MDR,id_saler,t1.dt,main_id,t1.rowid r from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount, sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR FROM (select * from trans where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t JOIN services ser ON ser.id_usl = t.id_usl LEFT JOIN trans_detail det ON det.id_trans=t.id_trans and det.id_type=3 WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2 ,dsbd_margin_trans t1 where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount) where main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS') and (dt >= date '2019-04-01' and dt < date '2019-04-05') group by r having count(*)>1 / какую ошибку выдает? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:48 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeздесь тоже какие-то опечатки есть - выдает аналогичную ошибкуНу так включи уже мозг, начни помогать себе сам. А Станислав - тряпка. Всякое чмо его гнобит, а он ещё и извиняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:48 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Stax, Сейчас выдает ошибку "таблица или представление пользователя не существует" ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:53 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Elic, Я обратился за помощью к форуму, так как я не знаю как решить эту задачу. Конкретно тебя я не звал на помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 12:55 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeКонкретно тебя я не звал на помощь.Это публичный форум. Но оставаться на ручнике - это твоё неотъемлемое право. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 13:00 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeСейчас выдает ошибку "таблица или представление пользователя не существует" ИМХО. Такую же ошибку получат почти 100% кто попробует выполнить твой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 13:03 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
IronMikeStax, Сейчас выдает ошибку "таблица или представление пользователя не существует" акуратненько где надо дорисуйте transit2,@sun (у меня нет Ваших таблиц/схем/баз) ps если есть много прав, мож для Вас будет проще найти ошибку примерно так 1) создать дубль таблички create table dsbd_margin_trans2 AS select * from dsbd_margin_trans ; 2) добавить отладочный столбец alter table dsbd_margin_trans2 ADD (cc int); 3) update тестовой таблички update dsbd_margin_trans2 t1 set (t1.mdr,t1.id_saler,cc)=(select max(MDR),MAX(id_saler).count(*) from (SELECT ... 4) глянуть где/для кого "двоит" select * from dsbd_margin_trans2 where cc>1 5) принять меры ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 13:32 |
|
Ошибка ORA-01427
|
|||
---|---|---|---|
#18+
Stax, Я не понимаю этой части кода (выделил цветом): select t1.rowid,count(*) cc from --update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)= (select MDR,id_saler from (SELECT t.dt, t.grafnum, t.id_pos, t.id_saler,sum(amount) as amount, sum(CASE WHEN t.id_type=1 THEN det.reward ELSE det.reward*-1 END)+sum(CASE WHEN t.id_type=1 THEN det.discount ELSE det.discount*-1 END) AS MDR FROM (select * from transit2.trans@sun where id_cont in ('8CAAEFEA6E0C4D1094B1139F182B6AF1','EF5D606A6E1A47E0AEC712CFF89B030F', '64B1A95E8E244EBDE053044A14ACEA8A')) t JOIN transit2.services@sun ser ON ser.id_usl = t.id_usl LEFT JOIN transit2.trans_detail@sun det ON det.id_trans=t.id_trans and det.id_type=3 WHERE ser.uname = 'л' AND t.grafnum > 0 AND t.id_type!=3 GROUP BY t.dt, t.grafnum, t.id_pos, t.id_saler) t2 ,dsbd_margin_trans t1 where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount) where t1.main_id in (select id_cont from v_tmp_business_products where nvl(name_business,0)='GPC RUS') and (t1.dt >= date '2019-04-01' and t1.dt < date '2019-04-05'); group by t1.rowid t1 точно на своем месте? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2019, 13:44 |
|
|
start [/forum/topic.php?fid=52&fpage=63&tid=1881961]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 423ms |
0 / 0 |