Oracle一次插入多条数据

Oracle一次插入多条数据

oracle不像mysql那样可以在values后面添加多个插入的值,mysql具体操作

mysql插入多条数据

-- mysql插入多行代码
insert into CB_PRACTICE(id_, type_,remark) values (5,'物理','浮力'),(6,'物理','阻力');

oracle插入多条数据的方法

  • 1.采用union all拼接查询方式

    -- oracle插入多行代码
    insert into CB_PRACTICE(id_, type_,remark)
    select 5,'物理','浮力' from dual
    union all select 6,'物理','阻力' from dual;
    
  • 2.采用insert all的方式

-- oracle插入多行代码
INSERT ALL
INTO CB_PRACTICE(id_, type_,remark) VALUES (7,'语文','唐诗')
INTO CB_PRACTICE(id_, type_,remark) VALUES (8,'语文','宋词')
SELECT * FROM DUAL;

效果等同于

INTO CB_PRACTICE(id_, type_,remark) VALUES (7,'语文','唐诗');
INTO CB_PRACTICE(id_, type_,remark) VALUES (8,'语文','宋词');

另外,insert all还支持往不同的表里插入数据,如:

insert all 
into table1(filed1,filed2)values('value1','value2')
into table2(字段1,字段2,字段3) values(1,值2,值3)
select * from dual;

你可能会感到很疑问,为什么后面都要跟select * from dual​?

因为INSERT ALL一定要跟select,就加一个系统表来作为无明确对象的select操作 ,如果你不加select,则语句报错
在这里插入图片描述

官方解释:

“ALL into_clause: Specify ALL followed by multiple insert_into_clauses to perform an unconditional multitable insert. Oracle Database executes each insert_into_clause once for each row returned by the subquery.”

指定ALL后跟多个insert_into_clauses以执行无条件多表插入。Oracle数据库对子insert_into_clause查询返回的每一行执行一次。

注意:select * from dual只有一条记录,所以上面的操作只会返回一条记录,如果你有自动增长的主键这里通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置(例如触发器方式自动设置id)

具体dual表的介绍:Oracle中DUAL表到底是什么?如何使用?

你可能感兴趣的:(sql)