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