powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge update по условию
13 сообщений из 13, страница 1 из 1
merge update по условию
    #39679975
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create table t1
(
c1 number,
c2 number,
c3 number,
constraint t1_pk primary key (c1)
)
;
create table t2
(
c1 number,
c2 number,
c3 number,
constraint t2_pk primary key (c1)
)
;


Хочется написать такой merge:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
merge into t2
using (select * from t1)
on (t1.c1=t2.c1)
when matched then
 update set t2.c2= t1.c2 where t2.c2 != t1.c2
 update set t2.c3= t1.c2 where t2.c3 != t1.c3
when not matched then
 insert  (t2.c1,t2.c2,t2c3) values (t1.c1,t1.c2,t1.c3)
;



Вариант update set t2.c2=case... не подойдет, т.к. вызовет срабатывания триггеров.

Возможно ли?
...
Рейтинг: 0 / 0
merge update по условию
    #39679977
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71Возможно ли?Конечно же, нет.
...
Рейтинг: 0 / 0
merge update по условию
    #39680039
роман23t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71[src PLSQL]
т.к. вызовет срабатывания триггеров.


А что имелось ввиду? причем тут наличие case и вызов триггера?
...
Рейтинг: 0 / 0
merge update по условию
    #39680067
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
роман23t,

Наверно что-то типа:
Код: plsql
1.
 update set t2.c2= decode(t2.c2,t1.c2,t2.c2,t1.c2), t2.c3= decode(t2.c3,t1.c3,t2.c3,t1.c2) where t2.c2 != t1.c2 or t2.c3 != t1.c3



т.е. не хотят t2.c2= t2.c2 потому что ...
...
Рейтинг: 0 / 0
merge update по условию
    #39680141
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
роман23talx71т.к. вызовет срабатывания триггеров.
А что имелось ввиду? причем тут наличие case и вызов триггера?наверняка
Код: plsql
1.
update of
...
Рейтинг: 0 / 0
merge update по условию
    #39680184
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте запуск триггеров зависимым от контекста.
...
Рейтинг: 0 / 0
merge update по условию
    #39680197
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLроман23t,

Наверно что-то типа:
Код: plsql
1.
 update set t2.c2= decode(t2.c2,t1.c2,t2.c2,t1.c2), t2.c3= decode(t2.c3,t1.c3,t2.c3,t1.c2) where t2.c2 != t1.c2 or t2.c3 != t1.c3



т.е. не хотят t2.c2= t2.c2 потому что ...

Да, или так:
Код: plsql
1.
update set t2.c2=case when t2.c2=t1.c2 when t2.c2 else t1.c2 end
...
Рейтинг: 0 / 0
merge update по условию
    #39680207
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71
Код: plsql
1.
case when t2.c2=t1.c2 when t2.c2 else t1.c2 end

Масло масляное.
...
Рейтинг: 0 / 0
merge update по условию
    #39680919
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
merge into t2
using (select * from t1 join t2 on t1.c1 = t2.c1 and (t2.c2 != t1.c2 or t2.c3 != t1.c3)) t1
on (t1.c1=t2.c1)
when matched then
 update set t2.c2= t1.c2, t2.c3= t1.c2
when not matched then
 insert  (t2.c1,t2.c2,t2c3) values (t1.c1,t1.c2,t1.c3)



Но, опять же, t2.c2 будут апдейтиться даже если t2.c2=t1.c2, но t2.c3 != t1.c3.
...
Рейтинг: 0 / 0
merge update по условию
    #39680930
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
7.
merge into t2
using (select * from t1 join t2 on t1.c1 = t2.c1 and (t2.c2 != t1.c2 or t2.c3 != t1.c3)) t1
on (t1.c1=t2.c1)
when matched then
 update set t2.c2= t1.c2, t2.c3= t1.c2
when not matched then
 insert  (t2.c1,t2.c2,t2c3) values (t1.c1,t1.c2,t1.c3)



Но, опять же, t2.c2 будут апдейтиться даже если t2.c2=t1.c2, но t2.c3 != t1.c3.У merge есть where clause.
...
Рейтинг: 0 / 0
merge update по условию
    #39680938
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadУ merge есть where clause.
Cогласен, перемудрил.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
merge into t2
using t1
on (t1.c1=t2.c1)
when matched then
 update set t2.c2= t1.c2, t2.c3= t1.c3 where t2.c2 != t1.c2 or t2.c3 != t1.c3
when not matched then
 insert  (t2.c1,t2.c2,t2c3) values (t1.c1,t1.c2,t1.c3)
...
Рейтинг: 0 / 0
merge update по условию
    #39680945
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooAmKadУ merge есть where clause.
Cогласен, перемудрил.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
merge into t2
using t1
on (t1.c1=t2.c1)
when matched then
 update set t2.c2= t1.c2, t2.c3= t1.c3 where t2.c2 != t1.c2 or t2.c3 != t1.c3
when not matched then
 insert  (t2.c1,t2.c2,t2c3) values (t1.c1,t1.c2,t1.c3)



а теперь при t2.c3 != t1.c3 будет update t2.c2= t1.c2 что не соответствует постановке
...
Рейтинг: 0 / 0
merge update по условию
    #39680969
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
t2.c2 != t1.c2 or t2.c3 != t1.c3

А это условие не даст обновить NULL-значение.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge update по условию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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