用批量绑定(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. c++不自动生成相关函数比如赋值、拷贝函数

    默认情况下,如果没有明确声明某些函数比如赋值.拷贝函数,c++会自动生成这些函数,通常他们是对成员进行by-value拷贝,有些时候,赋值.拷贝对象并无什么意义或者不合理,比如对于socket或者th ...

  2. 开发代码code中变量替换

    除了automake/autoconfig 之外,还有其他的替换方式. 参看vdsm https://github.com/oVirt/vdsm/blob/master/Makefile.am htt ...

  3. 解决国内 NPM 安装依赖速度慢问题

    不知道各位是否遇到这种情况,使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,笔者20M带宽,应该不是我网络的原因 ...

  4. Win32建立右键弹出菜单(PopMenu)

    自定义右键菜单: #ifndef _CONTEXTMENU_H_ #define _CONTEXTMENU_H_ #include <windows.h> //动态菜单 #define I ...

  5. C语言结构体,点运算和箭头运算

    C语言有一种数据类型叫结构体,其定义格式为: struct 结构体名 { 结构体成员变量定义; }; 如: struct student { char name[20]; int age ; doub ...

  6. Python3基础 tuple 创建空元组或者只有一个元素的元组 并 用乘法成倍扩充

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  7. 骁龙820和KryoCPU:异构计算与定制计算的作用 【转】

    本文转载自:https://www.douban.com/group/topic/89037625/ Qualcomm骁龙820处理器专为提供创新用户体验的顶级移动终端而设计.为实现消费者所期望的创新 ...

  8. ubuntu下git clone 提速

    环境:ubuntu16.04 方法:通过socks5代理并且使用http链接 步骤: 1.设置全局使用socks5代理,并且使用http传输 git config --global http.prox ...

  9. Java命令使用 jmap,jps,jstack,jstat,jhat,jinfo

    Jmap:可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等 Jmap是一个可以输出所有内存中 ...

  10. JavaScript:值类型 引用类型

    JavaScript类型 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数.  1.string var str="hongda"; v ...