Oracle存储过程merge into

Posted xiaokeaidn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle存储过程merge into相关的知识,希望对你有一定的参考价值。

最近本人在做一个后台新增数据功能时,用到了merge into函数,这里把碰到的一些自己理解进行一下总结,有什么不好的,不对的希望大家可以提出来。

merge into的形式:

MERGE INTO 表A USING 表B ON(a.a=b.b)
WHEN MATCHED THEN
更新数据
WHEN NOT MATCHED THEN
新增数据

该SQL语句功能是:

判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项,如下:

1.只update或者只insert

2.带条件的update或带条件的insert

3.全插入insert实现

4.带delete的update

接下来我们进行测试一下:

1、首先新建3张表,A、B、C

create table A
(
id NUMBER not null,
name NVARCHAR2(200) not null,
year NUMBER
);
create table B
(
id NUMBER not null,
aid NUMBER not null,
name NVARCHAR2(200) not null,
year NUMBER,
city NVARCHAR2(200)
);
create table C
(
id NUMBER not null,
name NVARCHAR2(200) not null,
city NVARCHAR2(200) not null
);
commit;

2、我们往表中导入数据:

insert into A values(1, ‘yangmi‘, 25);
insert into A values(2, ‘huge‘, 25);
insert into A values(3, ‘hejiong‘,  25);
commit;

insert into B values(1, 2, ‘arvin‘, 26, ‘广东‘);
insert into B values(2, 4, ‘tyler‘, 26, ‘广西‘);
insert into B values(3, 3, ‘alan‘, 40, ‘湖南‘);
commit;

3、然后我们使用merge into来更新数据

MERGE INTO A USING (select AID, NAME, YEAR from B) C ON (id = C.AID)
WHEN MATCHED THEN
UPDATE SET YEAR = C.YEAR
WHEN NOT MATCHED THEN
INSERT(ID, NAME, YEAR) VALUES(C.AID, C.NAME, C.YEAR);
commit;

以上是关于Oracle存储过程merge into的主要内容,如果未能解决你的问题,请参考以下文章

Oracle使用merge into 编写存储过程 遇编译错误:PL/SQL: ORA-00926: 缺失 VALUES 关键字

oracle存储过程select语句必须带into吗

如何解决oracle存储过程select into问题

oracle 中SQL 语句开发语法 SELECT INTO含义

关于oracle存储过程select into 未找到数据问题

关于oracle存储过程select into 未找到数据问题