学习OCI编程.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习OCI编程

学习OCI编程最近公司做的一个项目,要处理海量数据,数据是存放在Oracle数据库里,刚开始用的是ADO访问,速度极慢,后来改用Proc,效果还是不如人意,最后才用的OCI。因为之前对OCI不了解过,经2个星期的努力,终于完成了对Oracle数据库中的海量数据的读取与插入,速度的确很快,测试读取七千五百万条数据连一分钟都不到。之前用Proc,没用OCI,是因为Proc容易学,OCI相对难学些,说起难学,主要就是因为Oracle提供的一百多个API函数中每个函数都至少带有七八个参数,而每个参数都具有不同的重要的意义,一不小心设置错了,可能会导致潜在的错误,调试的时候也很难发现,这个我深有体会啊!下面结合我的学习过程,讲一下OCI编程:1:环境的配置一:系统环境:要想使用OCI编程需要安装Oracle的客户端,而这个普通的客户端比较大,在Oracle10g版本后推出了大小只有30M的Instantclient(即时客户端)作为Oracle的访问客户端。具体的配置可以参考这里:/ychellboy/archive/2010/04/16/1713884.html/ychellboy/archive/2010/04/16/1713884.html二:执行环境:windows下的配置可以参考这里:/sherlockhua/article/details/4353531/sherlockhua/article/details/4353531linux下的配置可以参考这里:/sherlockhua/article/details/4353531/sherlockhua/article/details/4353531 2:基本理论㈠首先要创建OCI 环境即创建和初始化OCI 工作环境,其他的OCI 函数需要OCI 环境才能执行。㈡分配OCI 环境句柄:它定义所有OCI 函数的调用环境,是其他句柄的父句柄。( 由OCIEnvInit 或OCIEnvCreate 生成 ) 。㈢错误句柄:作为一些OCI 函数的参数,用来记录这些OCI 函数操作过程中所产生的错误,当有错误发生时,可用OCIErrorGet() 来读取错误句柄中记录的错误信息。㈣服务器环境句柄:定义OCI 调用的服务器操作环境,它包含服务器、用户会话和事务三种句柄。㈤服务器句柄:标识数据源,它转换为与服务器的物理连接。㈥用户会话句柄:定义用户角色和权限及OCI 调用的执行环境。㈦事务句柄:定义执行 SQL 操作的事务环境,事务环境中包含用户的会话状态信息。㈧语句句柄:是一个标识 SQL 语句或 PL/SQL 块,以及其相关属性的环境。㈨Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成。用户不需要自己再申请,OCI输入变量存储在bind?句柄中,输出变量存储在定义句柄中。注意:Bind/Define 句柄在执行具体的 SQL 语句的时候,被隐含创建并连接到表达句柄( Statement Handle )上,当表达句柄释放时,它们也被隐含释放。所以在执行每一个 sql 语句时,先分配表达句柄,执行结束后,释放表达句柄,这样做保证不发生由于定位句柄和绑定变量句柄引起的内存泄漏。3:连接Oracle数据库的步骤OCI 连接过程比较复杂,除了分配设置各个基本句柄外,还要明确彼此之间的联系,大致流程如下:创建环境句柄: OCIEnvCreate(envhp, …);创建一个指定环境的错误句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)errhp,…);创建一个指定环境的服务器句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)servhp,…);建立到数据源的访问路径 : OCIServerAttach(servhpp, errhpp,…);创建一个指定环境的服务上下文句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…);为指定的句柄及描述符设置特定的属性: (void) OCIAttrSet((dvoid *)svchpp,…);创建一个指定环境的用户连接句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…);为用户连接句柄设置登录名及密码: (void) OCIAttrSet((dvoid *)usrhpp,…);认证用户建立一个会话连接: OCISessionBegin(svchpp, errhpp,…);创建一个句子句柄: OCIHandleAlloc((dvoid *)envhpp,…);s准备 SQL 语句: OCIStmtPrepare(stmthpp, errhpp,…);绑定输入变量: OCIBindByPo

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档