Oracle sql批量插入多条数据的实现

 更新时间:2023年07月29日 11:05:41   作者: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');

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Oracle数据库产重启服务和监听程序命令介绍

    Oracle数据库产重启服务和监听程序命令介绍

    大家好,本篇文章主要讲的是Oracle数据库产重启服务和监听程序命令介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • SQL PLUS基本命令的使用方法示例

    SQL PLUS基本命令的使用方法示例

    这篇文章主要给大家介绍了关于SQL PLUS基本命令的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Oracle通过procedure调用webservice接口的全过程

    Oracle通过procedure调用webservice接口的全过程

    存储过程是一组为了完成特定功能的sql语句集合,经过编译后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该过程带有参数)来执行他,本文介绍了Oracle通过procedure调用webservice接口的全过程,需要的朋友可以参考下
    2024-07-07
  • oracle12c安装报错:PRVF-0002的解决方法

    oracle12c安装报错:PRVF-0002的解决方法

    本文为大家介绍下如何解决oracle12c安装报错:PRVF-0002,具体的排查思路如下,有类似情况的朋友可以参考下
    2013-09-09
  • Oracle数据更改后出错的解决方法

    Oracle数据更改后出错的解决方法

    这篇文章主要介绍了Oracle数据更改后出错的解决方法,需要的朋友可以参考下
    2014-07-07
  • Oracle跨数据库查询并插入实现原理及代码

    Oracle跨数据库查询并插入实现原理及代码

    需要从一个数据库中的表GIS_WEICHAI_DATA_1S中的数据导入到另个一数据库的表GIS_WEICHAI_DATA_1S中,接下来为你讲解跨数据库查询并插入需要的朋友可以参考下
    2013-03-03
  • CentOS系统上安装配置Oracle数据库的详细教程

    CentOS系统上安装配置Oracle数据库的详细教程

    这篇文章主要介绍了CentOS系统上安装配置Oracle数据库的详细教程,包括安装过程中一些常见错误问题的解决,需要的朋友可以参考下
    2016-03-03
  • Oracle查看表空间使用率以及爆满解决方案详解

    Oracle查看表空间使用率以及爆满解决方案详解

    在日常的oralce使用中最长遇到的问题就是oralce的表空间满了,数据无法写入报错,下面这篇文章主要给大家介绍了关于Oracle查看表空间使用率以及爆满解决的相关资料,需要的朋友可以参考下
    2022-07-07
  • Oracle + mybatis实现对数据的简单增删改查实例代码

    Oracle + mybatis实现对数据的简单增删改查实例代码

    这篇文章主要给大家介绍了关于利用Oracle + mybatis如何实现对数据的简单增删改查的相关资料,文中图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • ProC 连接Oracle代码

    ProC 连接Oracle代码

    一段简单的ProC连接Oracle的代码
    2009-06-06

最新评论