Oracle常用的OCI函数一
Oracle常用的OCI函数
一. Oracle oci工具包安装:
$ORACLE_HOME\BIN:执行文件和help文件 $ORACLE_HOME\OCI\INCLUDE:头文件 $ORACLE_HOME\OCI\LIB\BC: for Borlanf C++的OCI库 $ORACLE_HOME\OCI\LIB\MSVC: for MS Visual C++的OCI库 如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so
1. 创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行。 2. 需要申请的句柄类型: OCI环境句柄: OCI_HTYPE_ENV—它定义所有OCI函数的环境调用环境,是其他句柄的父句柄。(由OCIEnvInit或OCIEnvCreate生成) 错误句柄:OCI_HTYPE_ERROR—作为一些OCI函数的参数,用来记录这些OCI函数操作过程中所产生的错误,当有错误发生时,可用COIErrorGet()来读取错误句柄 中记录的错误信息。 服务器环境句柄:OCI_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 句柄中,输出变量存储在定义句柄中 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时服务器连接设置为非阻塞方式 语句句柄:(OCI_HTYPE_STMT) OCI_ATTR_ROW_COUNT—只读,为当前已处理的行数,其default=1 OCI_ATTR_STMT_TYPE—读取当前SQL语句的类型: Eg : OCI_STMT_BEGIN OCI_STMT_SELECT OCI_STMT_INSERT OCI_STMT_UPDATE OCI_STMT_DELETE OCI_ATTR_PARAM_COUNT—返回语句选择列表中的列数 4. 关于输出变量定义:如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用 OCISTMTExecute前进行,如果查询语句的参数为用户动态输入的,则必须在执行后定义。 5. OCI函数返回值: 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函数调用正在执行中。 6. OCI连接有二种方式:Blocking(阻塞方式)和non_Blocking(非阻塞方式),阻塞方式就是当调用 OCI操作时,必须等到此OCI操作完成后服务器才返回客户端相应的信息,不管是成功还是失败。非阻塞方式是当客户端提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而并不等待服务端的操作完成。 对于non-blocking方式,应用程序若收到一个OCI函数的返回值为 OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,判断其成功与否。 可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现。系统默认方式为阻塞模式. 7. OCI函数设置的模式有: OCI_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()进行事务的提交,则所有活动的事务会自动回滚。
9. OCI重定义数据类型 typedef unsigned char ub1; typedef signed char sb1; typedef unsigned short ub2; typedef signed short sb2; typedef unsigned int ub4; typedef signed int sb4; typedef ub4 duword; typedef sb4 dsword; typedef dsword dword; 10. 在SQL语句准备后,可以用OCIAttrSet(0设置该语句的类型属性OCI_ATTR_STMT_TYPE,以后可读取语句属性,根据属性分别进行处理。 本文出自 51CTO.COM技术博客11. 批量绑定输入和定义输出参数:将数据存入一个静态数据组中。一次执行可以提交或读取多行记录值。 12. 结合占位符和指示 |


goodgoodstudy
博客统计信息
热门文章
最新评论
友情链接