教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> Oracle >> 备份恢复 >> Oracle Pro*C/C++游标和存储过程性能测试报告 RSS订阅
Oracle Pro*C/C++游标和存储过程性能测试报告
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

  1.1  目的说明
  
  进行Oracle数据库Pro*C/C++编程往往要对数据库中的记录进行读取,Pro*C/C++开发工具提供了二种对数据库读写的方法:一种我称之为游标(Cursor)的方式;另一种是C语言调用Oracle PL/SQL编程的储存过程方式;这二种方式在编程选择方面一般都没有太多数值比较说明,本文将实际编写测试代码,对这二种编码方式进行实际速度测试为各位读者在以后工作中进行编码选择提供经验。
  
  测试环境 二台PC机其中一台是数据库服务器,另一台是客户端即本文测试代码运行机器
  
  硬件
  
  CPU P4 2.6
  
  内存 1G
  
  硬盘 80G
  
  软件
  
  windows2000
  
  Oracle 8.1.7
  
  VC6
  
  1.2  测试记录
  
  直接使用游标(cursor)和采用存储过程进行整表同步的测试结果
  
  表1 120000条记录测试结果
   
  表2 3000条记录测试结果
   
  表3 9000条记录测试结果
  
  根据测试结果可以看出的确用存储过程在大数据量时是极其有优势的,特别是在大数据量的情况下,并且存储过程的性能极其稳定,cursor方式由于时间长,感觉受网络状况影响较大,时间长短不定。可以得出结论使用储存过程将18倍的提高数据查询读取速度。
  
  1.3  部分测试代码
  
  1.3.1  测试表脚本:
  
  创建用于查询的表
  
  drop table tb_boardt;
  
  create table tb_boardt(
  
  BYBOARDTYPE  NUMBER(3),
  
  ABYBOARDNAME VARCHAR2(15)
  
  ) tablespace cm_space;
  
  用储存过程向表中插入需要查询的120000记录:)
  
  declare
  
  i integer :=0;
  
  begin
  
  for i in 1..20000 loop
  
  insert into tb_boardt values(1,'Allen_BOARD');
  
  insert into tb_boardt values(2,'LILY_BOARD');
  
  insert into tb_boardt values(4,'LIL_BOARD');
  
  insert into tb_boardt values(5,'ALLEN_BOARD');
  
  insert into tb_boardt values(6,'BEMC_BOARD');
  
  insert into tb_boardt values(7,'TWIM_BOARD');
  
  commit;
  
  end loop;
  
  end;
  
  /
  
  用于读取记录的存储过程包头
  
  create or replace package testEptTbl as
  
  type charArrayType is table of varchar2(2048)
  
  index by binary_integer;
  
  type lcharArrayType is table of varchar2(2048)
  
  index by binary_integer;
  
  type numArrayType is table of int
  
  index by binary_integer;
  
  num  INTEGER;
  
  m_RncID INTEGER;
  
  procedure get_R0BrdLib(
  
  batch_size   in   integer,
  
  found     in out integer,
  
  done_fetch   out  integer,
  
  BoardType1 out numArrayType,/*单板类型Board Type*/
  
  BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/);
  
  end testEptTbl;
  
  /
  
  show err
  
  用于记录的存储过程包体
  
  create or replace package body testEptTbl as
  
  /*  3  */
  
  cursor CUR_R0BrdLib is
  
  SELECT BYBOARDTYPE,ABYBOARDNAME FROM tb_boardt;
  
  procedure get_R0BrdLib(
  
  batch_size   in   integer,
  
  found     in out integer,
  
  done_fetch   out  integer,
  
  BoardType1 out numArrayType,/*单板类型Board Type*/
  
  BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/) is
  
  begin
  
  if not CUR_R0BrdLib%isopen then
  
  open CUR_R0BrdLib;
  
  end if;
  
  done_fetch := 0;
  
  found := 0;
  
  for i in 1..batch_size loop
  
  fetch CUR_R0BrdLib
  
  into BoardType1(i),BoardName1(i);
  
  if CUR_R0BrdLib%notfound then
  
  close CUR_R0BrdLib;
  
  done_fetch := 1;
  
  exit;
  
  else
  
  found := found + 1;
  
  end if;
  
  end loop;
  
  end get_R0BrdLib;
  
  end testEptTbl;
  
  /
  
  show err
  
  1.3.2  游标方式:
  
  //倒出数据到zdb
  
  void CBOARDT::WriteZdb(int SubNetID,int NodeBID)
  
  {
  
  EXEC SQL BEGIN DECLARE SECTION;
  
  int iSubNetID = SubNetID;
  
  int iNodeBID = NodeBID;
  
  EXEC SQL END DECLARE SECTION;
  
  char tmpbuf[128],StartTime[256],EndTime[256];

来源:upschool.com.cn
作者:
关键字:Oracle,Pro*C,C++游标
发表日期:2007-1-6 0:48:34

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:Oracle的Archive Log模式下的恢复工作   下一篇:归档模式下用户管理的完全恢复


2008-12-4 9:02:29
本文的相类似文章
  • Oracle字符转换访问服务器漏洞
  • Oracle和mysql 的一些简单命令对比参照
  • oracle 的共享连接和专用连接方式之初探
  • Oracle的X$表系列介绍之-X$KSLLCLASS
  • Oracle数据导入导出imp/exp命令
  • 利用 Oracle 10g 技能学习 DB2 9.1
  • Oracle10g对回滚操作时间的准确评估
  • Oracle字符集子集与超级的对应关系
  • Oracle数据库密码破解易如反掌?
  • 针对Oracle数据库的优化器详细介绍
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com