c+oracle+bulk,使用Bulk Binding批量绑定的模式高效处理ORACLE大量数据

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

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

参考代码:

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;

重新想象 Windows 8 Store Apps &lpar;55&rpar; - 绑定&colon; MVVM 模式

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

jquery批量绑定click事件

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

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

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

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

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

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

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

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

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

&lbrack;SignalR&rsqb;SignalR与WCF双工模式结合实现服务端数据直推浏览器端

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

RMAN数据库恢复 之归档模式有&lpar;无&rpar;备份-丢失数据文件的恢复

1.归档模式有备份,丢失数据文件的恢复归档模式有备份,不管丢失什么数据文件,直接在RMAN下RESTOER--->RECOVER--->OPEN即可. RMAN> STARUP MO ...

利用 bat 批量处理命令实现手动控制mysql &sol;Oracle 服务的开启和关闭

利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭 因为最近在学习数据库的知识,主要学习的是oracle 数据库,然而好巧啊,java也是在学习,我们老师现在要我们做一 ...

随机推荐

Leetcode-2 Add Two Numbers

#2. Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits ...

&lbrack;moka同学笔记&rsqb;Yii2&period;0 modal的使用

第一次使用,时候不明白什么原理,大概用了几次后,才模模糊糊搞清楚原来是怎么一回事,现在就把写过的代码,贴在下边. 1.在视图文件中, 第一步首先在index.php文件中 做了一个a链接的按钮 调用了 ...

《JavaScript模式》第5章 对象创建模式

@by Ruth92(转载请注明出处) 第5章:对象创建模式 JavaScript 是一种简洁明了的语言,并没有其他语言中经常使用的一些特殊语法特征,如 命名空间.模块.包.私有属性 以及 静态成员 ...

CDT

Eclipse CDT 是 Eclipse 插件,它将把 Eclipse 转换为功能强大的 C/C++ IDE.

npm常用命令解析

npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载.安装.上传以及管理已经安装的包. npm ...

ubuntu nginx 伪静态 设置

简单的静态设置 1  vim nginx.conf // 修改nginx配置文件 server { .... root /usr/local/nginx/html; #nginx网站根目录 #下面这个 ...

perl 使用SUPER类来访问覆盖的方法

有时候,你希望一个衍生类的方法表现得象基类中的某些方法的封装器 这就是 SUPER 伪类提供便利的地方.它令你能够调用一个覆盖了的基类方法,而不用声明 是哪个类定义了该方 法.(注:不要把这个和第十一 ...

Framebuffer原理、使用、测试系列文章&comma;非常好的资料,大家一起学习

转载:http://blog.csdn.net/tju355/article/details/6881372 *一.FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核 ...

Python多线程使用和注意事项

多线程   基本实现: 第一种,函数方式 # -*- coding:utf-8 -*- import thread import time     def print_time(threadName, ...

转:mysql触发器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值