Oracle sql批量插入多条数据的实现
作者:cjjiang1536
这篇文章主要介绍了Oracle sql批量插入多条数据的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Oracle中一次插入多条的方法
在Oracle里面,不支持像mysql那样直接在后面拼多个记录。
Oracle中有两个方法达到批量插入的效果
方法一:采用union all拼接查询方式
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE) select 8000,0,'Multi 8000',1 from dual union all select 8001,0,'Multi 8001',1 from dual
方法二:采用insert all的方式
由于insert all方式插入多条时,通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置,(我这里采用触发器方式自动设置id)
1、创建测试表
create table test_insert( data_id number(10) primary key, user_name varchar2(30), address varchar2(50) )
data_id为主键,通过sequence产生主键值
2、创建序列
create sequence seq_test_insert minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 cache 20;
3、创建触发器
通过触发器自动给insert语句设置值
create or replace trigger tr_test_insert before insert on test_insert for each row begin select seq_test_insert.nextval into :new.data_id from dual; end;
4、插入数据
insert all into test_insert(user_name,address) values('aaa','henan') into test_insert(user_name,address) values('bbb','shanghai') into test_insert(user_name,address) values('ccc','beijing') select * from dual;
需要注意的是,在insert all语句里不能直接使用seq_test_insert.nextval,因为即便每个into语句里都加上seq_test_insert.nextval也不会获得多个值。
另外,insert all还支持往不同的表里插入数据,如:
insert all into table1(filed1,filed2)values('value1','value2') into table2(字段1,字段2,字段3) values(值1,值2,值3) select * from dual;
Oracle sql 批量插入 Insert all into
描述
Oracle INSERT ALL 语句用来用一个 INSERT 语句添加多行。
该行可以只使用一个SQL命令插入到一个表或多个表。
语法
Oracle INSERT ALL 语法如下:
INSERT ALL INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) SELECT * FROM dual;
参数
MYTABLE 向该表中插入记录
- column1, column2, column_n 该表中插入的列
- expr1, expr2, … expr_n 该表中插入的值
示例 - 插入到一个表
可以使用 INSERT INTO 语句多个记录插入到一个表。
例如,如果你想插入3行到成绩表,你可以运行下面的SQL语句:
INSERT ALL INTO score (s_id, s_name) VALUES (1000, 'ZS') INTO score (s_id, s_name) VALUES (2000, 'LS') INTO score (s_id, s_name) VALUES (3000, 'WZ') SELECT * FROM dual;
这等同于以下3 INSERT 语句:
INSERT INTO score (s_id, s_name) VALUES (1000, 'ZS'); INSERT INTO score (s_id, s_name) VALUES (2000, 'LS'); INSERT INTO score (s_id, s_name) VALUES (3000, 'WZ');
示例 - 插入到多个表
也可以使用 INSERT ALL 语句将多个行插入多个表中的一个命令。
例如,如果你想插入两条记录到成绩表一条记录到课程表,可以运行下面的SQL语句:
INSERT ALL INTO score (s_id, s_name) VALUES (1000, 'ZS') INTO score (s_id, s_name) VALUES (2000, 'LS') INTO course (c_id, c_name, c_time) VALUES (5000, 'Computer', '9:00') SELECT * FROM dual;
这等同于以下3 INSERT 语句:
INSERT INTO score (s_id, s_name) VALUES (1000, 'ZS'); INSERT INTO score (s_id, s_name) VALUES (2000, 'LS'); INSERT INTO course (c_id, c_name, c_time) VALUES (5000, 'Computer', '9:00');
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。