Oracle 批量插入(insert all into)

Oracle 批量插入(insert all into)项目需要用到导入excel表,并解析数据批量插入到oracle数据库中。1)直接解析excel,循环行,拼了sql,executeUpdate。执行一波…咦,这效率很低啊,有多少行数据就执行了多少句sql,基本是一万行已经接近一分钟了。2)每次都仅执行一条sql语句,时间是不是都花在建立连接放开连接balabala的过程上了,用executebatch批量执行sql语句试试。没…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在mysql中,批量插入可以这么写:

insert into my_table(field_1,field_2)
values
(value_1,value_2),
(value_1,value_2),
(value_1,value_2);

oracle中不支持这么写,那在Oracle中,怎么通过一个insert语句批量插入数据呢?

INSERT ALL 
INTO my_table(field_1,field_2) VALUES (value_1,value_2) 
INTO my_table(field_1,field_2) VALUES (value_3,value_4) 
INTO my_table(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;

补充:评论里提到的为什么要加 SELECT 1 FROM DUAL?
官方例子:

INSERT ALL
   INTO sales (prod_id, cust_id, time_id, amount)
   VALUES (product_id, customer_id, weekly_start_date, sales_sun)
   INTO sales (prod_id, cust_id, time_id, amount)
   VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
   INTO sales (prod_id, cust_id, time_id, amount)
   VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
   INTO sales (prod_id, cust_id, time_id, amount)
SELECT product_id, customer_id, weekly_start_date, sales_sun,
   sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
   FROM sales_input_table;

个人理解:

“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.”

insert all into并不表示一个表中插入多条记录,而是表示多表插入各一条记录,而这多表可以是同一个表,就成了单表插入多条记录。根据后面子查询的结果,前面每条into语句执行一次,博客正文中value都是“字面量”,所以用select 1 from dual返回一条记录即可。

参考地址:https://docs.oracle.com/database/121/SQLRF/statements_9015.htm#SQLRF01604
不当之处请指正,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160937.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland 2021 激活码【在线破解激活】

    goland 2021 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • HOOK编程

    HOOK编程引用地址:https://eason.blog.csdn.net/article/details/7707821通过安装Hook过程,可以用来屏蔽消息队列中某些消息HHOOKSetWindows

    2022年7月2日
  • executescalar mysql_ExecuteScalar[通俗易懂]

    executescalar mysql_ExecuteScalar[通俗易懂]这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
  • linux中sigaction函数详解

    linux中sigaction函数详解一、函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)intsigaction(intsignum,conststructsigaction*act,structsigaction*oldact);signum参数指出要捕获的信号类型,act参数指定新的信号处理方式,oldact参数…

    2022年5月26日
  • c# mysql executenonquery_C#-在ExecuteNonQuery上获取受影响的行「建议收藏」

    c# mysql executenonquery_C#-在ExecuteNonQuery上获取受影响的行「建议收藏」如果您运行大量ExecuteNonQuery()并一次提交所有这些,则可以通过读取“SELECTtotal_changes();”的返回值来获得连接后的总更改数。获得总更改的函数:publicstaticlongGetTotalChanges(SQLiteConnectionm_dbConnection){stringsql=”SELECTtotal_changes();”;u…

    2022年9月4日
  • Netty权威指南_netty权威指南

    Netty权威指南_netty权威指南《Netty权威指南》基本信息作者:李林锋   出版社:电子工业出版社ISBN:9787121233432上架时间:2014-5-29出版日期:2014年6月开本:16开页码:524版次:1-1所属分类:计算机>软件与程序设计>综合>高级程序语言设计 更多关于》》》《Netty权威指南》 编辑推荐   …

    2022年10月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号