8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png
insert all 和 insert first Oracle
admin 2022-9-4

现在有个需求:将数据插入多个表中。怎么做呢?可以使用insert into语句进行分别插入,但是在oracle中有一个更好的实现方式:使用insert all语句。
insert all语句是oracle中用于批量写数据的 。insert all分又为无条件插入和有条件插入。

一、表和数据准备

--创建表 CREATE TABLE stu( ID NUMBER(3), NAME VARCHAR2(30), sex VARCHAR2(2) ); --向stu表中插入数据 INSERT INTO stu(ID, NAME, sex) VALUES(1, '成都', '女'); INSERT INTO stu(ID, NAME, sex) VALUES(2, '深圳', '男'); INSERT INTO stu(ID, NAME, sex) VALUES(3, '上海', '女'); --复制表结构创建表stu1,stu2 CREATE TABLE stu1 AS SELECT t.* FROM stu t WHERE 1 = 2; CREATE TABLE stu2 AS SELECT t.* FROM stu t WHERE 1 = 2; --查询表 select * from stu; select * from stu1; select * from stu2;

stu

stu1

二、insert all无条件插入

将stu表中的数据插入stu1和stu2表中可以这样写

insert all into stu1 values(id,name,sex) into stu2 values(id,name,sex) select id,name,sex from stu;

stu1

stu2

三、insert all有条件插入

有条件插入又分为两种:insert all when…和insert first when…

  • insert all when类型
insert all when id=1 then into stu1 values(id,name,sex) when id=2 then into stu2 values(id,name,sex) else into stu1 values(id,name,sex) select id,name,sex from stu;

insert all

结果如下:

  • insert first when 类型
insert first when id<=2 then into stu1 values(id,name,sex) when id<=3 then into stu2 values(id,name,sex) select id,name,sex from stu;

结果如下:

insert first

四、insert all和insert first的区别

insert first是考虑先后关系的,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入。反之有数据不满足第一个when条件且满足第二个when条件,则数据会插入第二个条件下对应的表中,这也正是insert first与inset all的区别。
简单来说就是all只要满足条件,就会插入,这个会造成重复插入;first只要有一个满足条件,后面的条件不再判断,不会造成重复插入。
注意:insert all 无法支持序列插入,会导致两边不一致。

最新回复 (1)
    • 朕弟分享 | 专注小众,乐于分享!
      3
          
返回
发新帖 搜索 反馈 回顶部