- 浏览: 1002372 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
数组接口
数组接口允许你使用数组变量替代标量变量来进行绑定。当特定的DML语句需要插入或更新大量数据的时候,它就会非常有用。在执行DML语句的时候,不再需要针对每条记录分别执行一次,而可以将所有必要的值组合进一个数组然后仅仅需要执行一次即可,如果纪录的数量太大,也可以将执行操作拆分成小一点的批次。结果,到数据库的往返次数将与执行次数的数量成比例地下降。
必须强调的是,没有应用批量处理时加载的低性能并不是数据库引擎导致的,而是应用程序本身导致并反过来又受其拖累。
尽管数组接口对客户端来讲更加有效,数据库也能从中收益,事实上,数组接口降低了逻辑读的数量。
下面将提供一些关于如何在PL/SQL、OCI、JDBC和ODP.NET中使用数组接口的基本信息。
1.PL/SQL
在PL/SQL中,可以使用FORALL语句来应用数组接口。在执行一个DML语句的时候,可以利用它来将数据绑定成数组传递给数据库引擎。示例代码如下:
DECLARE
TYPE t_id IS TABLE OF t.id%TYPE;
TYPE t_pad IS TABLE OF t.pad%TYPE;
l_id t_id := t_id();
l_pad t_pad := t_pad();
BEGIN
-- prepare data
l_id.extend(100000);
l_pad.extend(100000);
FOR i IN 1..100000
LOOP
l_id(i) := i;
l_pad(i) := rpad('*',100,'*');
END LOOP;
-- insert data
FORALL i IN l_id.FIRST..l_id.LAST
INSERT INTO t VALUES (l_id(i), l_pad(i));
END;
需要特别注意的是,尽管这个语法是基于关键字FORALL的,但这不是一个循环。所有的纪录都是在一次数据库调用中发送过去的。
2.JDBC
在JDBC中,可以使用批量更新来使用数组接口(在一次执行操作中插入10万条记录)。例如代码如下:
sql = "INSERT INTO t VALUES (?, ?)";
statement = connection.prepareStatement(sql);
for (int i=1 ; i<=100000 ; i++)
{
statement.setInt(1, i);
statement.setString(2, "****************************************************************************************************");
statement.addBatch();
}
statement.executeBatch();
statement.close();
3.ODP.NET
在ODP.NET中,只要定义好基于数组的参数,并将属性ArrayBindCount设置为存储在数组中的值的个数,就可以应用数组接口了。下面的代码片段展示了这一点,它在一次执行操作中插入了10万条记录。
Decimal[] idValues = new Decimal[100000];
String[] padValues = new String[100000];
for (int i=0 ; i<100000 ; i++)
{
idValues[i] = i;
padValues[i] = "******************************************************************************************";
}
id = new OracleParameter();
id.OracleDbType = OracleDbType.Decimal;
id.Value = idValues;
pad = new OracleParameter();
pad.OracleDbType = OracleDbType.Varchar2;
pad.Value = padValues;
sql = "INSERT INTO t VALUES (:id, :pad)";
command = new OracleCommand(sql, connection);
command.ArrayBindCount = 100000;
command.Parameters.Add(id);
command.Parameters.Add(pad);
command.ExecuteNonQuery();
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22713有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1159Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2868首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1035我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1873pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3494整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9231. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1231参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1269大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1770利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 960往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1005当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1153在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1722步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 796Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1509接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
oracle执行DML(事物过程)的深入研究(一)
2010-12-14 10:26 2775用户所执行 DML (即执行事务)操作在 Oracle 内部按 ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1439数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11401.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 750本文讨论的是关于oracle ...
相关推荐
利用数组处理批量数据.
第6章 利用数组处理批量数据.ppt
C++程序设计讲义:第六章 利用数组处理批量数据.ppt
利用数组处理批量数据谭浩强C程序设计第四PPT课件.pptx
数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号 用一个数组名和下标惟一确定数组中的元素 数组中的每一个元素都属于同一个数据类型
java基础之一维数组元素的插入,java基础之一维数组元素的插入
该资源是C语言课件的第六章,主题为利用数组处理批量数据。本章详细介绍了如何使用数组来处理大量的数据。 在课件中,您将学习如何声明和初始化数组,以及如何使用循环结构和条件语句对数组进行遍历和处理。课件...
今天做了一个关于短消息批量删除的功能, ... 所以就决定用 数组作为存储过程的参数进行传值,在存储过程中批量删除。说实话这个选择有点得不偿失,本来以为上午就能搞定,谁知道从摸索到实现,居然发了大半天时间。
数组排序,插入新数组,自己看了就知道,我就不多说什么了。
实现数组的直接插入排序
VB 数组中插入数据实例 VB 数组中插入数据实例
利用数组处理批量数据.ppt
C语言基础教程_如何利用数组来处理批量数据C语言基础教程_如何利用数组来处理批量数据C语言基础教程_如何利用数组来处理批量数据C语言基础教程_如何利用数组来处理批量数据C语言基础教程_如何利用数组来处理批量数据...
C语言课堂的优质PPT之六,欢迎大家下载浏览,多谢支持!
Visual C++,把数组元素位置进行变动,把新的元素插入到数组中。
第六章 利用数组处理批量数据
数组的某一位删除和插入算法,算法里面采用定义数组作为传递数据的介质,并封装成函数,可以直接调用,此函数是针对自动焊锡机项目编写的,用于删除及插入焊点
第六章利用数组处理批量数据2022优秀文档.ppt
第六章 利用数组处理批量数据1
TIA博途中通过数组实现批量处理模拟量的梯形图程序示例