forall分批提交oracle,使用BULK COLLECT+FORALL加速批量提交
一、批量提交
批量提交特点:
占用较少undo,资源(独占锁,undo)快速释放,执行时间长
批量提交适合场景:
在线大批量插入,更新,删除数据
二、BULK COLLECT+FORALL性能提升
1.通过BULK COLLECT加速查询
不管是显示游标还是隐式游标,都可以通过BULK COLLECT在数据库的单次交互中获取多行数据。BULKCOLLECT相对Cursor Loop方式减少了PL/SQL引擎和SQL引擎之间的切换次数,因此也减少了提取数据时的额外开销。
2通过LIMIT rows限制提取的记录数
这种方法会减少对PGA的消耗,避免换页产生
3通过FORALL加速DML
FORALL告诉PL/SQL引擎要先把一个或多个集合的所有成员都绑定到SQL语句中,然后再把语句发送给SQL引擎,如果for ..loop循环,那么会发送n(循环的次数)次,而用Forall,一次行全部发送过去。
三、BULK COLLECT + FORALL批量提交例句
insert
declare
TYPE ARRAY IS TABLE OF big_table%ROWTYPE;
l_data ARRAY;
CURSOR c IS
SELECT * FROM big_table;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT
INTO l_data LIMIT 5000;
FORALL i IN 1 .. l_data.COUNT
INSERT /*+append*/
INTO big_table
VALUES l_data
(i);
commit;
EXIT WHEN c%NOTFOUND;
END LOOP;
CLOSE c;
delete
DECLARE
CURSOR mycursor IS
SELECT rowid FROM t WHERE OO = XX;
TYPE rowid_table_type IS TABLE OF rowid index by pls_integer;
v_rowid rowid_table_type;
BEGIN
OPEN mycursor;
LOOP
FETCH mycursor BULK COLLECT
INTO v_rowid LIMIT 5000;
EXIT WHEN v_rowid.count = 0;
FORALL i IN v_rowid.FIRST .. v_rowid.LAST
DELETE t WHERE rowid = v_rowid(i);
COMMIT;
END LOOP;
CLOSE mycursor;
END;
update
DECLARE
CURSOR mycursor IS
SELECT t_pk FROM t WHERE OO = XX;
TYPE num_tab_t IS TABLE OF NUMBER(38);
pk_tab NUM_TAB_T;
BEGIN
OPEN mycursor;
LOOP
FETCH mycursor BULK COLLECT
INTO pk_tab LIMIT 5000;
EXIT WHEN pk_tab.count = 0;
FORALL i IN pk_tab.FIRST .. v_rowid.LAST
UPDATE t SET name = name || ’bulk’ WHERE t_pk = pk_tab(i);
COMMIT;
END LOOP;
CLOSE mycursor;
END;
forall分批提交oracle,使用BULK COLLECT+FORALL加速批量提交相关推荐
- 使用BULK COLLECT+FORALL加速批量提交
为什么80%的码农都做不了架构师?>>> 一. 批量提交 批量提交特点: 占用较少undo,资源(独占锁,undo)快速释放,执行时间长 批量提交适合场景: 在线 ...
- oracle bulk select,批量查询 Oracle的bulk collect用法
select object_id, object_name, object_type from dba_objects where wner = 'TEST'; 1.在select into语句中使用 ...
- PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT
Oracle PL/SQL 开发的童鞋,一定对O家的bulk批量处理的性能很是赞赏吧. 但是PostgreSQL用户请不要垂涎,作为学院派和工业界的一颗璀璨明珠. 开源数据库PostgreSQL,也有 ...
- PL/SQL批处理语句:BULK COLLECT 和 FORALL
PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销 请看下图 ...
- oracle bulk collect
碰到的问题,有一个员工表,存储着员工的各种信息. 我要写一个过程,传进去员工的名字,打印该员工的信息. create or replace procedure getInfo(name emp.ena ...
- oracle bulk collect into,BULK COLLECT INTO
下面我们来看两个范例,一个是使用BULK COLLECT的,一个没有: 范例1.使用多次循环来检索并显示数据. 范例2.一次性获取数据,然后再循环显示. 下面是一些有关BULK COLLECT的建议: ...
- bulk怎么使用oracle,oracle学习之bulk collect用法
通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...
- Oracle学习笔记之五sp1,PL/SQL之BULK COLLECT
Bulk Collect特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率. BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQ ...
- 深入学习理解(1):java:ExecutorService invokeAll 任务的批量提交invokeAll两种方法的区别
ExecutorService的invokeAll方法有两种用法: 1.exec.invokeAll(tasks) 2.exec.invokeAll(tasks, timeout, unit) 其中t ...
最新文章
- GC rich的区域不易测序的原因
- 清华学长教你用Python 批量加水印只需一行命令!
- Ubuntu中的颜色选择器实用程序(彩色移液器)[关闭]
- 反弹端口 HTTP代理 HTTP隧道技术
- 阿里云PyODPS 0.7.18发布,针对聚合函数进行优化同时新增对Python 3.7支持
- linux内核与设备驱动,第二章 Linux内核与设备驱动程序
- C#完美任意设置webBrowser框架默认的IE内核版本
- Jmeter笔记(2)插件下载与安装
- tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器...
- winpe镜像文件iso下载_精品软件:最喜爱的也是最纯净WinPE-微PE工具箱
- 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
- mac 卸载ssh 重新安装mysql,linux下彻底卸载MySQL
- Extjs自定义日期控件的显示格式
- Android 9.0的One UI系统,三星S9/S9+更新One UI 安卓9.0已正式推送
- 视频教程-Excel项目实战从入门到精通(兼容2007、2010、2013、2016)-Office/WPS
- “衣衫合身定制”获数百万元天使轮投资,在线定制男性专属衬衫
- 无处不在的微创新——验证码的故事
- 两条线段的交点的计算
- Android Studio WiFi 之 获取 WiFi 名称、IP、Mac
- 解读:机器学习预测收益模型应该采取哪种度量指标
热门文章
- 鲲鹏服务器拦截系统调用,鲲鹏服务器unicfg工具适配OpenEuler 20.03问题
- Error: “incorrect inclusion of a cudart header file”
- Udacity机器人软件工程师课程笔记(六)-样本搜索和找回-基于漫游者号模拟器-优化和样本找回
- JavaScript原生代码处理JSON的一些高频次方法合集
- Codeforces.487C.Prefix Product Sequence(构造)
- CentOS7.4-btrfs管理及使用
- hdu 2199 Can you solve this equation? 二分
- [转]单点登录原理与简单实现
- sqlserver导入excel的电话号码(身份证)变为科学计数解决方式
- 某大型银行深化系统之二十:异常规范