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表的介绍:

经验分享 程序员 微信小程序 职场和发展