oracle 批量读,Oracle批量读取数据和批量绑定

通常我们获取游标数据是用

fetch some_cursor into var1, var2 的形式,自 Oracle 8i 起,Oracle 为我们提供了

fetch bulk

collect 来批量取游标中的数据,它能在读取游标中大量数据的时候提升效率,采用bulk

collect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。

Bulk

Collect批查询在某种程度上可以提高查询效率,它首先将所需数据读入内存,然后再统计分析,这样就可以提高查询效率。但是,如果Oracle数据库的内存较小,Shared

Pool Size不足以保存Bulk Collect批查询结果,那么该方法需要将Bulk

Collect的集合结果保存在磁盘上,在这种情况下,Bulk Collect方法的效率会较低;

fetch bulk

collect into 的使用格式是:fetch some_cursor bulk collect into col1, col2

limit xxx。col1、col2 是声明的集合类型变量,xxx 为每次取数据块的大小(记录数),相当于缓冲区的大小,可以不指定

limit xxx 大小。

测试实例:

--

1000000行数据使用批量fetch方式,执行时间1s

declare

type id_type is table of

emp.EMPNO%type;

v_id

id_type;

type name_type is table of

emp.ENAME%type;

v_name

name_type;

type sal_type is table of

emp.SAL%type;

v_sal

sal_type;

cursor all_emp

is

select empno,ename,sal from emp2

where rownum <= 1000000;

begin

open

all_emp;

loop

fetch all_emp bulk collect into

v_id,v_name,v_sal limit

256;

for i in 1..v_id.count

loop

null;

end

loop;

exit when

all_emp%notfound;

end

loop;

close all_emp;

end;

--1000000行数据使用逐行fetch方式执行时间11s

declare

v_id

emp2.EMPNO%type;

v_name

emp2.ename%type;

v_sal

emp2.sal%type;

cursor all_emp

is

select empno,ename,sal from emp2

where rownum <=

1000000;

begin

open

all_emp;

loop

fetch all_emp into

v_id,v_name,v_sal;

exit when

all_emp%notfound;

null;

end

loop;

close all_emp;

end;

几点说明:

1、 从测试结果来看游标的记录数越大时,用 fetch bulk

collect into 的效率很明显示,趋于很小时就差不多了。

2、 可以在select into,fetch

into,returning into语句使用bulk collect。

3、 在使用bulk

collect时,所有的into变量都必须是collections

4、 在这个例子中,我们借助于集合的 first、last

、count 来进行遍历。

5、 关于 limit 参数

6、 你可以根据你的实际来调整 limit

参数的大小,来达到你最优的性能。limit 参数会影响到 pga 的使用率。而且也可以在 fetch bulk 中省略 limit

参数,写成

fetch all_contacts_cur bulk collect into

v_contacts;

不写 limit 参数时,可以去除外层循环,begin-end 部分可写成:

begin

open

all_emp;

fetch all_emp bulk collect into

v_id,v_name,v_sal;

for i in 1..v_id.count

loop

null;

end

loop;

close all_emp;

end;

除了Bulk

Collect批查询外,我们还可以使用FORALL语句来实现批插入、删除和更新,这在大批量数据操作时可以显著提高执行效率

使用FORALL比FOR效率高,因为前者只切换一次上下文,而后者将是在循环次数一样多个上下文间切换。

--FOR用法 ,9s

DECLARE

TYPE ID_TYPE IS TABLE OF

EMP.EMPNO%TYPE;

V_ID

ID_TYPE;

TYPE NAME_TYPE IS TABLE OF

EMP.ENAME%TYPE;

V_NAME

NAME_TYPE;

TYPE SAL_TYPE IS TABLE OF

EMP.SAL%TYPE;

V_SAL

SAL_TYPE;

CURSOR ALL_EMP

IS

SELECT EMPNO,ENAME,SAL FROM EMP2

WHERE ROWNUM <= 200000;

BEGIN

OPEN

ALL_EMP;

FETCH ALL_EMP BULK COLLECT INTO

V_ID,V_NAME,V_SAL;

FOR I IN 1..V_ID.COUNT

LOOP

insert into t(id)

values(V_ID(i));

END

LOOP;

CLOSE ALL_EMP;

END;

--FORALL用法 ,5S

DECLARE

TYPE ID_TYPE IS TABLE OF

EMP.EMPNO%TYPE;

V_ID

ID_TYPE;

TYPE NAME_TYPE IS TABLE OF

EMP.ENAME%TYPE;

V_NAME

NAME_TYPE;

TYPE SAL_TYPE IS TABLE OF

EMP.SAL%TYPE;

V_SAL

SAL_TYPE;

CURSOR ALL_EMP

IS

SELECT EMPNO,ENAME,SAL FROM EMP2

WHERE ROWNUM <= 200000;

BEGIN

OPEN

ALL_EMP;

FETCH ALL_EMP BULK COLLECT INTO

V_ID,V_NAME,V_SAL

;

FORALL I IN

1..V_ID.COUNT

insert into t(id)

values(V_ID(i));

CLOSE ALL_EMP;

END;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java压缩_Java压缩

java压缩在最近的项目中&#xff0c;我们不得不做一些我个人从未真正看过的事情。 压缩。 我们需要拍摄几个文件和图像&#xff0c;将它们压缩并提供给FTP使用&#xff0c;是的&#xff0c;总有一天&#xff0c;感觉确实回到了90年代。 除了过去的FTP之行外&#xff0c;它还是一…

我们的世界

看完记得留言说说你的感想 http://lchml.com/our-world/ 转载于:https://www.cnblogs.com/licheng127/p/4239021.html

eslint php,ESlint操作步骤详解

这次给大家带来ESlint操作步骤详解&#xff0c;ESlint操作的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。vue-cli脚手架创建的项目默认使用ESlint规则&#xff0c;启动项目的时候因为各种语法报错&#xff0c;不得不先停下了解一下什么是ESlint&…

FileSystemMap:与文件系统交互的自然方法

作为项目的一部分&#xff0c;我目前正在研究创建FileSystemMap 。 我已经开始了一个非常小的GitHub的项目在这里举办的代码。 本质上&#xff0c;此映射实现将允许用户与其文件系统上的目录进行交互&#xff0c;就好像它是java.util.Map 。 映射中的每个条目将是该目录中的文…

动画原理——绘制正弦函数环绕运动椭圆运动

书籍名称&#xff1a;HTML5-Animation-with-JavaScript 书籍源码&#xff1a;https://github.com/lamberta/html5-animation 1.正弦函数。x位置递增&#xff0c;y位置用sin生成。 这段代码是不需要ball.js的。 代码如下&#xff1a; <!doctype html> <html><hea…

oracle优质图书,经典Oracle图书推荐(之四)_oracle

经典的oracle图书:Oracle High Performance Tuning for 9i and 10g by Gavin PowellBook DescriptionThere are three parts to tuning an Oracle database: data modeling, SQL code tuning and physical database configuration.A data model contains tables and relationsh…

expr命令 linux,Shell expr命令进行整数计算的实现

expr 是 evaluate expressions 的缩写&#xff0c;译为“表达式求值”。Shell expr 是一个功能强大&#xff0c;并且比较复杂的命令&#xff0c;它除了可以实现整数计算&#xff0c;还可以结合一些选项对字符串进行处理&#xff0c;例如计算字符串长度、字符串比较、字符串匹配…

单身数字_完美单身

单身数字我不时遇到一些Java程序员&#xff0c;他们不确定他们应该如何正确实现Singleton模式。 &#xff08;如果您不知道什么是Singleton&#xff0c;请尝试Wikipedia&#xff1a; Singleton模式 &#xff09;。 我并不是在谈论在线程环境中的正确实现。 但是&#xff0c;使用…

linux下bios设置内存电压,系统安装的BIOS设置?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼要安装系统前&#xff0c; 要为旧系统做好备份工作&#xff0c;为新系统准备了所需的软件之后&#xff0c;接下来的工作就是安装Windows XP了。而安装系统要知道系统安装的BIOS设置&#xff0c; 如果您的硬盘采用了动态分区&#x…

DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)

select DATEADD(Day, DATEDIFF(Day,0,GETDATE()), 0),DATEDIFF(Day,0,GETDATE()),GETDATE() 结果&#xff1a; (无列名) (无列名) (无列名)2015-01-30 00:00:00.000 42032 2015-01-30 20:04:57.050 转载于:https://www.cnblogs.com/Unrmk-LingXing/p/4263098.html

linux内存剩余量为什么这么少,为什么我的Linux系统中空闲内存如此之少?

"How come there is only so few free memory on my Linux PC?"Come to same question? No matter how much you put RAM in your motherboard, you quickly notice the free RAM is reduced so fast. Free RAM miscalculation? No!Before answering this, first …

java heroku_Heroku运行Java

java heroku如果您是像我这样的Java迷&#xff0c;那么您有个好消息值得振奋。 Heroku现在运行Java&#xff01; 嗯&#xff0c;与其他流行的“ Web”语言&#xff08;如PHP / RoR&#xff09;不同&#xff0c;Java具有在Web服务器中进行部署和维护的麻烦。 一直以来&#xff0…

Java集合框架练习-计算表达式的值

最近在看《算法》这本书&#xff0c;正好看到一个计算表达式的问题&#xff0c;于是就打算写一下&#xff0c;也正好熟悉一下Java集合框架的使用&#xff0c;大致测试了一下&#xff0c;没啥问题。 import java.util.*; /** * 用来计算表达式* for example: 12*3*(43*1)-3*123/…

关于Ecllipse

一、熟悉Eclipse 1.Eclipse是由IBM公司投资4000万美元开发的集成开发工具。它基于Java语言编写&#xff0c;并且是开放源代码的、可扩展的&#xff0c;也是目前最流行的Java集成开发工具之一。另外&#xff0c;IBM公司捐出Eclipse源代码&#xff0c;组建了Eclipse联盟&#xff…

怎么自学linux操作系统,linux操作系统好学吗_要学什么

描述linux操作系统的基础知识是比较好学的&#xff0c;但是需要我们通过大量地练习来牢记这些基础知识。Linux操作系统依靠其多用户和多任务、跨平台硬件支持、丰富的软件支持、可靠的安全性、良好的稳定性和完善的网络功能的优势吸引了众多用户&#xff0c;企业办公也逐渐使用…

JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!

如果您一直在Twitter上关注一些Java的关键人物&#xff0c;或者在Reddit上阅读了“新闻”&#xff0c;那么您一定不会错过Spring和JavaEE宣传人员之间热闹的“贱人之战”&#xff08;请原谅我的法语&#xff09;。 首先&#xff0c;于尔根霍勒&#xff08;JrgenHller&#xff…

编程技术交流

需要技术交流包含java:HTML&#xff0c; MySQL&#xff0c; Redis&#xff0c; Linux &#xff0c;Nginx &#xff0c;Tomcat &#xff0c; IntelliJ IDEA &#xff0c;SVN &#xff0c; Eclipse &#xff0c;Maven &#xff0c; RationalRose&#xff0c; Java SE&#xff0c;…

Convert Sorted Array to Binary Search Tree

https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题思路&#xff1a; 回忆一下BST二叉搜索树的定义&#xff0c;他是这样一个二叉树&am…

visa linux 串口 通信,使用visa进行串口通信

最近因为项目的原因&#xff0c;都在研究上位机通信问题。这两个星期研究还是蛮多心得&#xff0c;下面就写写关于使用visa进行串口通信的内容LABVIEW软件LabVIEW 在仪器控制方面&#xff0c;还是很有优势的&#xff0c;把你仪器给你&#xff0c;读懂指令&#xff0c;然后估计半…

使用Sublime text总是弹出Unable to save...

用户设置添加&#xff1a; "atomic_save": false