ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:99.74KB ,
资源ID:22177303      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22177303.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OCI操作oracle数据库word文档良心出品Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OCI操作oracle数据库word文档良心出品Word格式.docx

1、标准的SQL语言按照它的功能不同,可以分为查询、操纵、定义以及控制四种类型。每一种都有若干关键字,具体如表1所示。一个SQL语句在OCI应用程序中的执行步骤一般如下:1) 准备SQL语句。调用函数OCIStmtPrepare();2)在SQL语句中绑定需要输入到SQL语句中的变量。对于DML语句来说,由于它带有输入变量,我们可以通过调用一个或者多个函数OCIBindByPos()、OCIBindByName()等把输入变量的地址绑定在DML语句中的占位符中;3)执行SQL语句。调用OCIStmtExecute()函数。对于DDL语句到这一步就完成了一个语句的执行;4)描述SQL中的输出的数据。

2、如果有必要的话,我们可以调用函数OCIParamGet()与OCIAttrGet()来获取我们所读取的记录的字段个数、字段的数据类型以及字段数据定义的最大长度。5)定义输出变量。对于DQL(Data Query Language)语句,即SELECT的查询语句,需要定义一定数量的变量用来接受所选择列的数据。我们可以调用OCIDeflneByPos()、OCIDefineObject()函数等来完成这个任务。也就建立SQL语句所返回的数据与应用程序中变量的关系。6)获取数据。我们可以调用函数OCIStmtFetch()来把用SELECT选中的记录的数据赋予应用程序中的变量。过程以及过程中调用到的

3、函数如图3所示:虽然Oracle对标准的SQL语言有所扩展,但它也是建立在标准的SQL语言的基础之上。上图是一个一般SQL执行的流程图,对于不同的SQL语句,所需要的步骤也有所不同。对于DCL与DDL语句,由于没有数据的输入与输出,仅仅涉及到一些权限与定义或者删除数据库中的对象的问题,因此只需要上图的第一步与第三步便可以了。而对于DQL与DML语句,由于有数据的输入与输出,因此需要的步骤就多一些。其实,DML也可以只用两步来完成。这是因为DML语句中仅仅涉及数据的输入(即,数据从应用程序到数据库端),因此我们可以把所要输入的数据以字符串的形式放在SQL语句中。而DQL不仅可能有数据输入,而且也

4、有数据输出(从数据库端到应用程序),因此,一个DQL语句需要如上图的六个步骤。OCI环境配置Oracleoci工具包安装: $ORACLE_HOMEBIN:执行文件和help文件 $ORACLE_HOMEOCIINCLUDE:头文件 $ORACLE_HOMEOCILIBBC:forBorlanfC+的OCI库 $ORACLE_HOMEOCILIBMSVC:MSVisual如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so 以上所有过程,只需安装一个oracle客户

5、端,oci的所有头文件和库文件全部包含在内,VC开发时只需包含指定的头文件,引用相关库即可。OCI实现操作oracle数据库1创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行。2需要申请的句柄类型OCI环境句柄:OCI_HTYPE_ENV它定义所有OCI函数的环境调用环境,是其他句柄的父句柄。(由OCIEnvInit或OCIEnvCreate生成) 错误句柄:OCI_HTYPE_ERROR作为一些OCI函数的参数,用来记录这些OCI函数操作过程中所产生的错误,当有错误发生时,可用COIErrorGet()来读取错误句柄中记录的错误信息。服务器环境句柄:OCI_

6、HTYPE_SVCCTX定义OCI调用的服务器操作环境,它包含服务器、用户会话和事务三种句柄。服务器句柄:OCI_HTYPE_SERVER标识数据源,它转换为与服务器的物理连接。用户会话句柄:OCI_HTYPE_SESSION定义用户角色和权限及OCI调用的执行环境。事务句柄:OCI_HTYPE_TRANS定义执行SQL操作的事务环境,事务环境中包含用户的会话状态信息。语句句柄:OCI_HTYPE_STMT是一个标识SQL语句或PL/SQL块,以及其相关属性的环境。Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成。用户不需要自己再申请,OCI输入变量存储在bind句柄中

7、,输出变量存储在定义句柄中 3句柄属性包括服务器环境句柄属性:(OCI_HTYPE_SVCCTX) OCI_ATTR_SERVER设置/读取服务环境的服务器环境属性 OCI_ATTR_SESSION设置/读取服务环境的会话认证环境属性 OCI_ATTR_TRANS设置/读取服务环境的事务环境属性 用户会话句柄属性:(OCI_HTYPE_SESSION) OCI_ATTR_USERNAME设置会话认证所使用的用户名 OCI_ATTR_PASSWORD设置会话认证所使用的用户口令 (OCI_HTYPE_SEVER) OCI_ATTR_NOBLOCKING_MODE设置/读取服务器连接:=TRUE时

8、服务器连接设置为非阻塞方式 (OCI_HTYPE_STMT)OCI_ATTR_ROW_COUNT只读,为当前已处理的行数,其default=1 OCI_ATTR_STMT_TYPE读取当前SQL语句的类型:Eg:OCI_STMT_BEGIN OCI_STMT_SELECTOCI_STMT_INSERTOCI_STMT_UPDATEOCI_STMT_DELETE OCI_ATTR_PARAM_COUNT返回语句选择列表中的列数 4关于输出变量定义如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用OCISTMTExecute前进行,如果查询语句的参数为用户动态输入的,则必

9、须在执行后定义。5OCI函数返回值OCI_SUCCESS函数执行成功(=0) OCI_SUCCESS_WITH_INFO执行成功,但有诊断消息返回,可能是警告信息 OCI_NO_DATA函数执行完成,但没有其他数据 OCI_ERROR函数执行错误 OCI_INVALID_HANDLE传递给函数的参数为无效句柄,或传回的句柄无效 OCI_NEED_DATA需要应用程序提供运行时刻的数据 OCI_CONTINUE回调函数返回代码,说明回调函数需要OCI库恢复其正常的处理操作 OCI_STILL_EXECUTING服务环境建立在非阻塞模式,OCI函数调用正在执行中。6OCI连接有二种方式Blocki

10、ng(阻塞方式)和non_Blocking(非阻塞方式),阻塞方式就是当调用OCI操作时,必须等到此OCI操作完成后服务器才返回客户端相应的信息,不管是成功还是失败。非阻塞方式是当客户端提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而并不等待服务端的操作完成。对于non-blocking方式,应用程序若收到一个OCI函数的返回值为OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,判断其成功与否。可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现。系统默认方式为阻塞模式. 7OCI函数设置的模式O

11、CI_DEFUALT:使用OCI默认的环境 OCI_THREADED:线程环境下使用OCI OCI_OBJECT:对象模式 OCI_SHARED:共享模式 OCI_EVENTS OCI_NO_UCB OCI_ENV_NO_MUTEX:非互斥访问模式 其中模式可以用逻辑运算符进行迭加,将函数设置成多多种模式:如mode=OCI_SHREADED|OCI_OBJECT 8事务当应用进程与服务器断开连接时,程序没有使用OCITransCommit()进行事务的提交,则所有活动的事务会自动回滚。9OCI重定义数据类型 typedefunsignedcharub1;signedsb1;shortub2;

12、sb2;intub4;sb4;ub4duword;sb4dsword;dsworddword;10属性操作在SQL语句准备后,可以用OCIAttrSet(0设置该语句的类型属性OCI_ATTR_STMT_TYPE,以后可读取语句属性,根据属性分别进行处理。11批量绑定输入和定义输出参数将数据存入一个静态数据组中。一次执行可以提交或读取多行记录值。12占位符和指示器变量占位符:在程序中,一些SQL语句需要在程序运行时才能确定它的语句数据,在设计时可用一个占位符来代替,当程序运行时,在它准备好语句后,必须为每个占位符指定一个变量,即将占位符与程序变量地址结合,执行时,Oracle就从这些变量中读取

13、数据,并将它们与SQL语句一起传递给Oracle服务器执行。OCI结合占位符时,它将占位符与程序变量关联起来,并同时要指出程序变量的数据类型和数据长度。如:select*fromtestwherename=:p1andagep2:p1和:p2为占位符 指示器变量:由于在Oracle中,列值可以为NULL,但在C语言中没有NULL值,为了能使OCI程序表达NULL列值,OCI函数允许程序为所执行语句中的结合变量同时关联一个指示符变量或指示符变量数组,以说明所结合的占位符是否为NULL或所读取的列值是否为NULL,以及所读取的列值是否被截取。除SQLTNTY(SQLNamedDataType)外,

14、指示符变量或指示符变量数组的数据类型为sb2,其值说明:作为输入变量时:(如insert,update语句中)=-1:OCI程序将NULL赋给Oracle表的列,忽略占位符结合的程序变量值 =0:应用程序将程序变量值赋给指定列 作为输出变量时:(如select语句中)=-2:所读取的列数据长度大于程序变量的长度,则被截取。所读取的值为NULL,输出变量的值不会被改变。数据被完整读入到指定的程序变量中 0:所读取的列数据长度大于程序变量的长度,则被截取,指示符变量值为所读取数据被截取前的实际长度 OCI函数说明示例以下面结构作为说明 swordswResult;OCIBind*hBind;OCI

15、Define*hDefine;OCIStmt*stmtp OCIError*errhp;OCISvcCtxsvchp OCIEnvenvhpp;OCISessionusrhp;sb2 sb2aInd30;/指示器变量,用于取可能存在空值的字段 Typedefstrcut tname40;age;t_std;struct sb2sb2_tname100;sb2_age100;stdInd_T;/指示器数组 ub2ub2_tname100;ub2_age100;stdLen_T;/字段长度 t_stdtstd100;/数组变量,用于批量操作 stdInd_TtstdInd;stdLen_Ttstd

16、Len;tstdRet;std;各函数数明 OCIEnvCreate(*envhpp,/OCI环境句柄指针 mode,/初始化模式:OCI_DEFAULT/OCI_THREADED等 CONSTdvoid*ctxp, *(*malicfp)(dvoid*ctxp,size_tsize), *(ralocfp)(dvoid*ctxp,dvoid*memptr,size_tnewsize), void*(*mfreefp)(dvoid*memptr), Size_txstramemsz, Dvoid*usrmempp ) egswResult=OCIEnvCreate(&envhpp,OCI_DE

17、FAULT,NULL,0,NULL);if(swResult!&OCI_SUCCESS_WITH_INFO)returnFALSE;OCIInitialize( ub4mode, *ctxp, CONST*(*malocfp)(/*size_tsize_*/), *(*ralocfp)(/*_*memptr,newsize(*mfreefp)*memptr_*/) );OCIEnvInit(*envhpp, xtramemsz, 注:在8i以后,可用OCIEnvCreate一个函数就可以初始化环境了,相当于OCIInitialize+OCIEnvInit 2申请/释放句柄OCIHandleAl

18、loc( *parenth,/新申请句柄的父句柄,一般为OCI环境句柄 *hndlpp,/申请的新句柄Ub4type,/句柄类型 xtramem_sz,/申请的内存数 *usrmempp/申请到的内存块指针 一般需要申请的句柄有:服务器句柄OCIServer,句柄类型OCI_HTYPE_SERVER 错误句柄OCIError,用于捕获OCI错误信息,句柄类型OCI_HTYPE_ERROR 事务句柄OCISession,句柄类型OCI_HTYPE_SESSION 上下文句柄OCISvcCtx,句柄类型OCI_HTYPE_SVCCTX SQL语句句柄OCIStmt,句柄类型OCI_HTYPE_ST

19、MT eg:申请一个错误句柄OCIError OCIHandleAlloc(envhpp,(dvoid*)&errhp,OCI_HTYPE_ERROR,OCI_SUCCESS_WITH_INFO) 释放句柄 OCIHandleFree( *hndlp,/要释放的句柄 typeOCIHandleFree(stmtp,OCI_HTYPE_STMT) 3读取/设置句柄属性OCIAttrSet( *trgthndlp,/需设置的句柄名 trghndltyp, /句柄类型 *attributep,/设置的属性名 size, /属性值长度 attrtype,/属性类型 *errhp/错误句柄 一般要设置的

20、属性有:服务器实例: 句柄类型OCI_HTYPE_SVCCTX,属性类型OCI_ATTR_SERVER 连接数据的用户名:句柄类型OCI_HTYPE_SESSION,属性类型OCI_ATTR_USERNAME 用户密码 句柄类型OCI_HTYPE_SESSION,属性类型OCI_ATTR_PASSWORD 事务: 句柄类型OCI_HTYPE_SVCCTX,属性类型OCI_ATTR_SESSION 设置用户名和密码 username20,passwd20;strcpy(username,”tiger”) strcpy(passwd,”cotton”) OCIAttrSet(usrhp,OCI_HTYPE_SESSION,(text*)username,strlen(username),OCI_ATTR_USERNAME,errhp);passwd,strlen(passwd),OCI_ATTR_PASSWORD,OCIAttrGet( /需读取的句柄名 /读取的属性名 *sizep, /属性值长度 )4连接/断开服务器多用户方式连

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1