powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-01427
10 сообщений из 35, страница 2 из 2
Ошибка ORA-01427
    #39878277
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMikeStax,

Я не понимаю этой части кода (выделил цветом):

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 точно на своем месте?

update надо заменить селектом, я б заменил примерно так

про ; уже написали, был невнимательный

шоб меньше менять можно так попробовать
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select * from dsbd_margin_trans t1 WHERE
--update dsbd_margin_trans t1 set (t1.mdr,t1.id_saler)=
(select   /* MDR,id_saler */ count(*) cc  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)
 >1 and  
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') 



мне тяжело что-то советовать без таблиц

скорее ето схема, как бы я искал ошибочку

....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878366
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

выдал 1 строчку...
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878370
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IronMike,
Посмотрел в исходном подзапросе: действительно по DT, GRAFNUM, ID_POS и AMOUNT - есть 1 дубль. Но ID_SALER разный. Почему тогда этот дубликат возникает?
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878371
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMikeStax,

выдал 1 строчку...
теперь с ней (с ее данными) разберайтесь

для етой строки (для етого ИД) подзапрос (select MDR,id_saler ...) возвращает больше одной строки

....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878382
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMikeПосмотрел в исходном подзапросе: действительно по DT, GRAFNUM, ID_POS и AMOUNT - есть 1 дубль. Но ID_SALER разный. Почему тогда этот дубликат возникает? 21997199
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878401
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMikeIronMike,
Посмотрел в исходном подзапросе: действительно по DT, GRAFNUM, ID_POS и AMOUNT - есть 1 дубль. Но ID_SALER разный. Почему тогда этот дубликат возникает?
как вариант
ужесточить условие
where t1.grafnum=t2.grafnum and t1.id_pos=t2.id_pos and t1.dt=t2.dt and t1.amount=t2.amount


....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878441
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Да, понял)
В общем, суть в том, что в исходной базе - 1 строчка, а в коде для ее обновления - 2 строчки
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878449
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Так это же исходное условие))
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878455
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMikeStax,
Так это же исходное условие))

исходное условие приводит к ошибке, поетому
1) поменять условие
2) разобраться с данными, почему подзапрос возвращает больше 1-й строки

....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-01427
    #39878462
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxIronMikeStax,
Так это же исходное условие))

исходное условие приводит к ошибке, поетому
1) поменять условие
2) разобраться с данными, почему подзапрос возвращает больше 1-й строки

....
stax

Да, надо будет подумать, как ужесточить условие. Странно, что до этого за 2 года не было таких случаев)

Спасибо большое за помощь!
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-01427
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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