create table t (
id integer not null primary key,
name varchar2(10),
amount integer
);
insert into t(id, name, amount)
values (1, 'Apple', 100),
(2, 'Banana', 200),
(3, 'Cherry', 300);
select * from t;
ID|NAME |AMOUNT|
--+------+------+
1|Apple | 100|
2|Banana| 200|
3|Cherry| 300|
insert into t(id, name, amount)
select 1, 'Apple', 100 from dual
union all
select 2, 'Banana', 200 from dual
union all
select 3, 'Cherry', 300 from dual;
select *
from (values
(1, 'Apple', 100),
(2, 'Banana', 200),
(3, 'Cherry', 300)
) s(id, name, amount);
ID|NAME |AMOUNT|
--+------+------+
1|Apple | 100|
2|Banana| 200|
3|Cherry| 300|
with s(id, name, amount) as (
values
(1, 'Apple', 100),
(2, 'Banana', 200),
(3, 'Cherry', 300)
)
SELECT * FROM s;
ID|NAME |AMOUNT|
--+------+------+
1|Apple | 100|
2|Banana| 200|
3|Cherry| 300|
merge into t
using (values
(1, 'Apple', 400),
(2, 'Banana', 500),
(3, 'Cheery', 600)
) s(id, name, amount)
on (t.id = s.id)
when matched then
update set t.name = s.name,
t.amount = s.amount
when not matched then
insert (t.id, t.name, t.amount)
values (s.id, s.name, s.amount);
select * from t;
ID|NAME |AMOUNT|
--+------+------+
1|Apple | 400|
2|Banana| 500|
3|Cheery| 600|
原文作者:SQL编程思想;如有侵权,请联系管理员删除。