用批量绑定(bulk binding)的方式。当循环执行一个绑定变量的sql语句时候,在PL/SQL 和SQL引擎(engines)中,会发生大量的上下文切换(context switches)。使用bulk binding,能将数据批量的从plsql引擎传到sql引擎,从而减少上下文切换过程,提升效率。

       在Oracle使用过程中经常会遇到需要插入大量数据的情况,这种情况下就可以使用Bulk Binding插入数据。

参考资料:Oracle逐行提交、批量提交及极限提速方法

        ORACLE Bulk Binding批量绑定

      Oracle PL/SQL 优化与调整 -- Bulk 说明

参考代码:

DECLARE
-- Local variables here
l_date_f DATE;
l_date_t DATE;
TYPE t_event_id IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
l_event_id t_event_id; CURSOR c_data(p_date_f DATE, p_date_t DATE) IS
SELECT xe.event_id,
xe.event_date,
xe.application_id,
xe.process_status_code
FROM xla_events xe
WHERE xe.application_id = 707
AND xe.process_status_code <> 'P'
AND xe.event_date > p_date_f
AND xe.event_date <= p_date_t; TYPE t_tab IS TABLE OF c_data%ROWTYPE;
l_event t_tab;
BEGIN
-- Test statements here
l_date_f := to_date('2008/01/01', 'yyyy/dd');
l_date_t := to_date('2017/05/31', 'yyyy/dd'); FOR i IN 1 .. (l_date_t - l_date_f) LOOP
--dbms_output.put_line('l_date_f:'||to_char(l_date_f+i-1,'yyyy/dd'));
--dbms_output.put_line('l_date_t:'||to_char(l_date_f+i,'yyyy/dd')); OPEN c_data(l_date_f + i - 1, l_date_f + i);
LOOP
FETCH c_data BULK COLLECT
INTO l_event LIMIT 10000;
--dbms_output.put_line(l_event.count);
EXIT WHEN l_event.count = 0;
FORALL j IN 1 .. l_event.count
INSERT INTO xla_events_bak
(application_id,
event_id,
event_date,
event_status_code,
process_status_code)
VALUES
(l_event(j).application_id,
l_event(j).event_id,
l_event(j).event_date,
l_event(j).event_status_code,
l_event(j).process_status_code); FORALL j IN 1 .. l_event.count
UPDATE xla_events xe
SET xe.process_status_code = 'P', xe.event_status_code = 'P'
WHERE xe.event_id = l_event(j).event_id
AND xe.application_id = l_event(j).application_id; COMMIT;
END LOOP;
CLOSE c_data;
END LOOP;
END;

      

使用Bulk Binding批量绑定的模式高效处理ORACLE大量数据的更多相关文章

  1. 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式

    [源码下载] 重新想象 Windows 8 Store Apps (55) - 绑定: MVVM 模式 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 绑定 通过 M ...

  2. 深入浅出WPF-06.Binding(绑定)01

    Binding(绑定) 先上图,再解释 针对这个图,我们先来说说什么是Binding. Binding就是一个桥梁,建立在数据和UI之间的桥梁.既然是数据驱动,那么我们就把数据称之为"源&q ...

  3. jquery批量绑定click事件

    jquery批量绑定click事件: var selects = $(".public_select dd ul li"); debugger; /*$(".public ...

  4. 数据绑定(三)为Binding指定绑定源的几种方法

    原文:数据绑定(三)为Binding指定绑定源的几种方法 Binding的源是数据的来源,所以,只要一个对象包含数据并能通过属性把数据暴露出来,它就能当作Binding的源来使用,常用的办法有: 一. ...

  5. 深入浅出WPF-06.Binding(绑定)02

    Binding对数据的校验和转换 1)数据校验,通过Binding的ValidationRules属性(Collection类型)进行校验.可以设置多个数据校验条件. <Slider Margi ...

  6. FoxOne---一个快速高效的BS框架--数据访问(Dao)

    FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...

  7. 使用pandas导出PostgreSQL 模式下的所有表数据并保存

    PostgreSQL PostgreSQL 是一个非常强大的数据库,它是一个免费的对象-关系数据库服务器(数据库管理系统).PostgreSQL支持大部分 SQL 标准, 在语句上也有很大的相似的地方 ...

  8. 测试Oracle 11gr2 RAC 非归档模式下,offline drop数据文件后的数据库的停止与启动测试全过程

    测试Oracle 11gr2 RAC 非归档模式下,offline drop数据文件后的数据库的停止与启动测试全过程 最近系统出现问题,由于数据库产生的日志量太大无法开启归档模式,导致offline的 ...

  9. [SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端

    原文:[SignalR]SignalR与WCF双工模式结合实现服务端数据直推浏览器端 之前开发基于WinForm监控的软件,服务端基于Wcf实现,里面涉及双工模式,在客户端里面,采用心跳包机制保持与服 ...

随机推荐

  1. docker简单操作

    下载镜像docker pull httpd(镜像名) 查看镜像:docker images 做容器 docker run -ti -v(映射)/www:发布目录的路径 -p 80:80 --name ...

  2. PowerDesigner 教程

    摘自:http://www.cnblogs.com/advocate/p/3730027.html 目标:本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念. 一.概念数据模型概述 ...

  3. Android java 多线程(三)

  4. python 线程 进程 协程 学习

    转载自大神博客:http://www.cnblogs.com/aylin/p/5601969.html 仅供学习使用···· python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和 ...

  5. Android项目开发二

    微博客户端开发 本周学习计划 学习布局控件和UI设计相关知识. 微博验证,学习OAuth相关知识. 看懂微博客户端开发部分代码. 把借鉴代码导入到Android Studio中并运行成功. 实际完成情 ...

  6. IDEA,RubyMine等JetBrains系列软件通用破解教程

    此教程不光适用于IDEA,还可以在RubyMine等JetBrains系列软件使用,亲测可用. (1)下载安装你需要的JetBrains系列软件,安装完最好不要打开,直接finish,断开网络. (2 ...

  7. Open Source Log Management

    https://www.elastic.co/solutions/logging The Elastic Stack (sometimes known as the ELK Stack) is the ...

  8. object Add(object Before, object After, object Count, object Type);

    [表达式] .Add(Before, After, Count, Type) [表达式] 一个代表 Sheets 对象的变量. Before指定工作表的对象,新建的工作表将置于此工作表之前. Afte ...

  9. 【深度学习】Pytorch 学习笔记

    目录 Pytorch Leture 05: Linear Rregression in the Pytorch Way Logistic Regression 逻辑回归 - 二分类 Lecture07 ...

  10. pip 安装pandas报UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5错

    当Python在window环境中通过pip安装pandas报标题这样的错,主要是因为python默认编码格式是:ascii 在https://www.python.org/dev/peps/pep- ...