需求:向一张表插入1百万的数据,用存储过程实现。

测试:用第一种实现用了30S,如果改为bulk实现,不到2s。

sql> drop table t purge;

表已删除。

sql> set timing on

sql> create table t (x int);

sql> begin

for i in 1.. 1000000

loop

execute immediate 'insert into t values(:x)' using i;

end loop;

commit;

end;

/

@H_403_28@

@H_403_28@

PL/sql 过程已成功完成。

已用时间: 00: 00: 30.24

sql> truncate table t;

表被截断。

sql> DECLARE

TYPE V_X IS table of t%rowtype;

records V_X;

cursor cur_query is select rownum x from dual connect by level <=1000000;

begin

open cur_query;

loop

fetch cur_query bulk collect into records LIMIT 100000;

FORALL i in 1 .. records.count

INSERT INTO T values records(i);

exit when cur_query%notfound;

end loop;

commit;

end;

/

@H_403_28@

@H_403_28@

已用时间: 00: 00: 01.48

优化原理:

使用2个引擎来执行和代码块:引擎和PL/sql引擎,语句会导致在两个引擎之间进行context switch,从而影响性能。

2.从本质上讲,使用特殊的block或者subprogram来降低context switches可以提高性能。当语句在loop内使用collection elements作为bind variables来运行时,就会产生大量的context switches。与bulk相关的有2个语法:forall和bulk collect。

FORALL:将数据打包,一次性从PL/sql引擎发送给引擎。

bulk collect:将处理之后的结果集放到bulk collect里,然后一次性把bulk collect从引擎发送给PL/sql引擎。

因为bulk减少2个引擎之间的context switches,从而提升了性能,当要处理的数据量越大,使用bulk和不使用bulk性能区别就越明显。

总结

以上是编程之家为你收集整理的Oracle——Bulk全部内容,希望文章能够帮你解决Oracle——Bulk所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

oracle中bulk,Oracle——Bulk相关推荐

  1. oracle中primary,oracle中如何 Primary key自增

    oracle中如何 Priamry key自增 摸索了一晚上,终于实现了key的自增,现在将实现的过程总结如下: (1)首先创建一个表:这里是我创建的一个User表,包括id,user_name,pa ...

  2. oracle中命令,oracle中常用命令汇总(一)

    1.如何查看Oracle的数据库sid名称? 如果用sysdba身份登录.执行以下命令: SQL> conn / as sysdba; 已连接. SQL> select name from ...

  3. oracle中totimestamp,oracle中to_timestamp和to_date什么区别

    date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是DATE类型的扩展,可以精确到小数秒(frac ...

  4. oracle中nextday,Oracle日期函数 next_day

    Oracle日期函数 next_day 在Oracle是提供了next_day求指定日期的下一个日期. 语法 : next_day( date, weekday ) date is used to f ...

  5. oracle中submit,Oracle中DBMS_JOB.SUBMIT的用法说明

    Oracle中DBMS_JOB.SUBMIT的用法说明 用法DEMO: DBMS_JOB.SUBMIT(:jobno,//job号 'your_procedure;',//要执行的过程 trunc(s ...

  6. oracle中isnumeric,Oracle 中 isnumeric 的三种实现

    使用过 asp 的应该对 isnumeric 函数不会陌生,这是一个常用的判断入参是否为数字的函数.在 oracle 中没有现成的判断是否为数字函数,下面就用三种方法来实现: 1. 利用 to_num ...

  7. oracle中pdb,Oracle 12C新特性-CDB和PDB 详解

    最近看到好多人都在尝试Oracle中的12C新特性-容器数据库,今年3月Orcle推出了Release2版本,可以算是一个稳定版本了.下午着手尝试了一下,还是蛮不错得 1.前言 CDB与PDB是Ora ...

  8. Oracle 中使用 fetch bulk collect into 批量效率的读取

    http://www.jzxue.com/shujuku/oracle/201109/21-8976.html 通常我们获取游标数据是用 fetch some_cursor into var1, va ...

  9. Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

    通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧.然而自 Oracle 8i 起,Oracle 为我们提供了 fetc ...

  10. oracle中defined,Oracle:专栏定义(Oracle: column ambigously defined)

    Oracle:专栏定义(Oracle: column ambigously defined) 我收到以下错误. 据我所知,所有列都是由表名定义的,所以我不明白为什么我从Oracle数据库中得到这个错误 ...

最新文章

  1. 沃尔沃加入英伟达阵营 2021年开卖自动驾驶汽车
  2. c专家编程/c陷阱_如何避免常见的初学者陷阱并像专家一样开始编码
  3. phpwind管理权限泄露漏洞
  4. 在cocos creator 中使用websocket
  5. Kubernetes之yaml文件详解(汇总-详细)
  6. pg_restore - 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库。
  7. SQL单行函数-通用函数
  8. Oracle数据同步接口,增量数据从ERP系统到本地临时表封装解决方案
  9. Serverless Computing:现状与基础知识
  10. 快二游戏数据分析_1.更快的数据分析
  11. solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
  12. sysmain服务怎么启动 Win7 SuperFetch无法启动
  13. 华为交换机初始化和配置SSH和TELNET远程登录方法
  14. 支持向量回归(SVR)数据预测
  15. 20常见的手机问题及其解决方案
  16. 富文本TinyMCE
  17. django个人博客
  18. 坐拥深圳7栋房,月收租60万!房东却选择开出租……
  19. 动人的牵线美的连接符-两张表的查询(一)
  20. 共享打印机无法打印问题解决

热门文章

  1. 【操作系统】程序执行过程
  2. 深圳软件测试培训:事件与事件处理
  3. 单元测试覆盖分析指标-翻译中
  4. 制作圆形图片,你会以下几种?
  5. 织梦DedeCMS列表页多条件联动筛选功能(移动端列表页使用电脑端模板问题解决)
  6. winform 画图的放大和缩小_画错图纸被判3年,罚10万!画图真的需要严谨
  7. 帐号激活与忘记密码 实例
  8. 请主动远离打击你自信的人
  9. 资源者、配置者、投资人
  10. HTML中通过js 自定义一个鼠标悬停后立刻显示的Title(附效果图)