powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Некорректный код обновления таблицы
10 сообщений из 10, страница 1 из 1
Некорректный код обновления таблицы
    #39889244
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Есть такой код обновления таблицы:

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(CASE WHEN t.id_type=1 THEN t.amount ELSE t.amount*-1 END) 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
and t.dt >= date '2019-04-01' and t.dt < date '2019-04-02'
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)='PPS')

Код не совсем корректен из-за последнего фильтра (как выяснил, он не все нужные строчки обновляет).

Однако когда его убираю, то те значения, которые нужно обновить - код обновляет. А все остальные значения в полях mdr и id_saler затирает...

Как доработать этот код, чтобы он не затирал те значения, которые он не нашел?
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889249
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM MERGE
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889252
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMike,

начни уже с тега src, а?
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889256
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

спасибо, попробую через merge
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889259
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMike,
update ...
....
where ...
and EXISTS
(select MDR,id_saler from (SELECT ............ до закрывающей скобки)

....
stax
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889260
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,

а что значит данный тэг?
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889261
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
............ до закрывающей скобки)
И пусть следующие разбираются в этом говно-копи-пасте.
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889263
IronMike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Спасибо!

А я могу написать:
where EXISTS
(select MDR,id_saler from (SELECT ............ до закрывающей скобки)

?
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889271
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMike,

Сир,
Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные (если возможно), лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
...
select 1245,'name10245',to_date('11.02.3167','DD.MM.YYYY') from dual 
)
select col2 from tbl
...


2) Покажите что сделали
3) Покажите что получили (Лучше в текстовом виде, а не screenshot)
4) используйте Тэги, читать код без них неудобно
5) "Портянки текста", лучше убрать под spoiler или приложить файлом
...
Рейтинг: 0 / 0
Некорректный код обновления таблицы
    #39889380
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IronMike

А я могу написать:?


от Вас зависит

я напр сначала вместо update
1) отлаживал select
надо чтоб select t1.* from dsbd_margin_trans t1 where ... возвращал необходимый (правильный) набор строк

2) потом в селект добавлял "фразу" из set
select t1.*,(...) st from dsbd_margin_trans t1 where ...
проверял результат

3) менял селект на update

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


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