oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into)

准备环境

1.oracle数据库自带的scott下的用户表
2.跟emp表表结构相同的两张表,表名我定义为emp_a,emp_b

建表:
create table emp_a as select * from emp where 1 > 2;  -- 只要表结构,不要表数据
create table emp_b as select * from emp where 1 > 2;  -- 只要表结构,不要表数据

EMP表数据–
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第1张图片

用法解析

insert first into: 这种方式表示要把数据分别插入到不同的表中,从上往下第一张表匹配成功的数据在下面的表中不会再进行二次匹配
-- 把emp表中部门大于等于30的数据插入到emp_a表中 --把部门大于等于20的数据插入到emp_b表中
insert first 
 when deptno >= 30 THEN
into emp_a
 when deptno>= 20 then
into emp_b
select * from emp;

执行代码后emp_a表数据
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第2张图片
执行代码后emp_b表数据
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第3张图片
解析:由于使用的是first,在第一次成功匹配到部门30的数据并且插入到emp_a表中,第二次匹配deptno>=20的时候由于30部门的数据已经匹配到e m p_a表中,不会进行二次匹配,所以emp_a表中只有20 部门的数据

继续往下说insert all into的用法
首先清空emp_a emp_b表中的数据
truncate table emp_a;
truncate table emp_b;

insert all into: 这种方式表示要把数据分别插入到不同的表中,从上往下第一张表匹配成功的数据在后面的表中如果满足条件的话也会进行匹配
-- 把emp表中部门大于等于30的数据插入到emp_a表中 --把部门大于等于20的数据插入到emp_b表中
insert all 
 when deptno >= 30 THEN
into emp_a
 when deptno>= 20 then
into emp_b
select * from emp;

emp_a表数据
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第4张图片
emp_b表数据
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第5张图片

思维导图
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法_第6张图片

注:由于楼主表达能力有限,表达不清晰之处敬请谅解,可私下与楼主进行沟通!

2020-09-13 第一篇博客

你可能感兴趣的:(oracle数据库中批量把一张表里面的数据插入到不同的表中的方法)