LibOciLib使用说明(2017-1-26更新)
LibOciLib使用说明
整理者:赤勇玄心行天道
QQ:280604597
Email:280604597@qq.com
大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的!
你可以随意转载,无需注明出处!
写文档实属不易,我希望大家能捐助我,继续支持我的工作,我会继续努力帮助大家,金额随意,1块也行,感谢!
支付宝:280604597@qq.com
QQ红包
OCILIB的QQ群:553666676
1、 复制解决方案根目录下的“LibOciLib”文件夹到调用程序的解决方案根目录下。
2、 调用程序需添加代码:
| 
 #include "..\LibOciLib\ocilib.h" #if (defined _WIN64) && (defined _DEBUG) #pragma comment(lib, "..\\LibOciLib\\LibOciLib_x64_Debug_MDd_LIB.lib") #pragma comment(lib, "..\\LibOciLib\\oci_x64.lib") #elif (defined _WIN64) && (defined NDEBUG) #pragma comment(lib, "..\\LibOciLib\\LibOciLib_x64_Release_MD_LIB.lib") #pragma comment(lib, "..\\LibOciLib\\oci_x64.lib") #elif (defined _WIN32) && (defined _DEBUG) #pragma comment(lib, "..\\LibOciLib\\LibOciLib_x86_Debug_MDd_LIB.lib") #pragma comment(lib, "..\\LibOciLib\\oci_x86.lib") #elif (defined _WIN32) && (defined NDEBUG) #pragma comment(lib, "..\\LibOciLib\\LibOciLib_x86_Release_MD_LIB.lib") #pragma comment(lib, "..\\LibOciLib\\oci_x86.lib") #endif  | 
3、 编译调用程序的项目。
1 简介
官方网站:http://vrogier.github.io/ocilib/
2 字段数据类型对应规则
| 
 DATABASE TYPE  | 
 C API TYPE  | 
 C API SUBTYPE  | 
 C++ API  | 
 C++ API SUBTYPE  | 
| 
 PL/SQL BOOLEAN  | 
 boolean  | 
 bool  | 
||
| 
 NUMBER  | 
 short  | 
 short  | 
||
| 
 NUMBER  | 
 unsigned short  | 
 unsigned short  | 
||
| 
 NUMBER  | 
 int  | 
 int  | 
||
| 
 NUMBER  | 
 unsigned int  | 
 unsigned int  | 
||
| 
 NUMBER  | 
 big_int (long long)  | 
 big_int (long long  | 
||
| 
 NUMBER  | 
 big_uint (unsigned  | 
 big_uint (unsigned  | 
||
| 
 NUMBER  | 
 float  | 
 float  | 
||
| 
 NUMBER  | 
 double  | 
 double  | 
||
| 
 NUMBER  | 
 OCI_Number *  | 
 ocilib::number  | 
||
| 
 FLOAT  | 
 double  | 
 double  | 
||
| 
 BINARY FLOAT  | 
 float  | 
 float  | 
||
| 
 BINARY DOUBLE  | 
 double  | 
 float  | 
||
| 
 CHAR  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 VARCHAR  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 VARCHAR2  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 NVARCHAR  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 NVARCHAR2  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 ROWID  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 UROWID  | 
 otext *  | 
 ocilib::ostring  | 
||
| 
 VARRAW  | 
 void *  | 
 ocilib::Raw  | 
||
| 
 RAW  | 
 void *  | 
 ocilib::Raw  | 
||
| 
 LONG  | 
 OCI_Long *  | 
 OCI_CLONG  | 
 ocilib::Clong  | 
|
| 
 LONG VARCHAR  | 
 OCI_Long *  | 
 OCI_CLONG  | 
 ocilib::Clong  | 
|
| 
 LONG RAW  | 
 OCI_Long *  | 
 OCI_BLONG  | 
 ocilib::Blong  | 
|
| 
 DATE  | 
 OCI_Date *  | 
 ocilib::Date  | 
||
| 
 TIMESTAMP  | 
 OCI_Timestamp *  | 
 OCI_TIMESTAMP  | 
 ocilib::Timestamp  | 
 NoTimeZone  | 
| 
 TIMESTAMP WITH TIME  | 
 OCI_Timestamp *  | 
 OCI_TIMESTAMP_TZ  | 
 ocilib::Timestamp  | 
 WithTimeZone  | 
| 
 TIMESTAMP WITH  | 
 OCI_Timestamp *  | 
 OCI_TIMESTAMP_LTZ  | 
 ocilib::Timestamp  | 
 WithLocalTimeZone  | 
| 
 INTERVAL YEAR TO  | 
 OCI_Interval *  | 
 OCI_INTERVAL_YM  | 
 ocilib::Interval  | 
 YearMonth  | 
| 
 INTERVAL DAY TO  | 
 OCI_Interval *  | 
 OCI_INTERVAL_DS  | 
 ocilib::Interval  | 
 DaySecond  | 
| 
 Character LOB  | 
 OCI_Lob *  | 
 OCI_CLOB  | 
 ocilib::Clob  | 
 LobCharacter  | 
| 
 National Character  | 
 OCI_Lob *  | 
 OCI__NCLOB  | 
 ocilib::NClob  | 
 LobNationalCharacter  | 
| 
 Binary LOB  | 
 OCI_Lob *  | 
 OCI_BLOB  | 
 ocilib::Blob  | 
 LobBinary  | 
| 
 Binary FILE  | 
 OCI_File *  | 
 OCI_BFILE  | 
 ocilib::File  | 
|
| 
 VARRAY  | 
 OCI_Coll *  | 
 OCI_COLL_VARRAY  | 
 ocilib::Collection  | 
 Varray  | 
| 
 NESTED TABLE  | 
 OCI_Coll *  | 
 OCI_COLL_NESTED_TABLE  | 
 ocilib::Collection  | 
 NestedTable  | 
| 
 PL/SQL INDEXED  | 
 OCI_Coll *  | 
 OCI_COLL_INDEXED_TABLE  | 
 ocilib::Collection  | 
 IndexedTable  | 
| 
 NAMED DATATYPE  | 
 OCI_Object *  | 
 ocilib::Object  | 
||
| 
 PL/SQL RECORD  | 
 OCI_Object *  | 
 ocilib::Object  | 
||
| 
 REF  | 
 OCI_Ref *  | 
 ocilib::Reference  | 
3 常用函数
OCI_Initialize() 初始化OCILIB库
OCI_Cleanup() 释放OCILIB库
OCI_ConnectionCreate() 创建Oracle数据库连接,并返回Oracle数据库连接句柄
OCI_ConnectionFree() 断开Oracle数据库连接,并释放Oracle数据库连接句柄
OCI_GetServerMajorVersion() 获取Oracle数据库服务器版本号
OCI_GetServerMinorVersion() 获取Oracle数据库服务器版本号
OCI_GetServerRevisionVersion() 获取Oracle数据库服务器版本号
OCI_GetVersionConnection() 获取Oracle数据库服务器版本号
OCI_StatementCreate() 创建Statement句柄,Statement句柄用于执行SQL语句
OCI_StatementFree() 释放Statement句柄
OCI_Prepare() 准备SQL语句
OCI_BindString() 绑定SQL语句变量
OCI_Execute() 执行SQL语句
OCI_ExecuteStmt() 准备并执行SQL语句
OCI_GetResultset() 获取结果集句柄
OCI_ReleaseResultsets() 释放结果集句柄
OCI_FetchNext() 获取结果集句柄的第一条或下一条数据
OCI_GetString() 获取结果集句柄的当条数据的某个字段的字符串内容
OCI_GetInt() 获取结果集句柄的当条数据的某个字段的整数内容
3.1 函数模板(未完成)
| 
 函数名称  | 
 xxx  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 函数主要功能说明。  | 
| 
 函数声明  | 
 类型 函数名 ( 类型 参数1, 类型 参数2, …… );  | 
| 
 函数参数  | 
 参数1,[输入|输出|输入&输出]: 参数说明。  | 
| 
 参数2,[输入|输出|输入&输出]: 参数说明。  | 
|
| 
 ……  | 
|
| 
 返回值  | 
 返回值1:返回值说明。 返回值2:返回值说明。 ……  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 …… ……  | 
3.2 初始化
3.2.1 OCI_Initialize
| 
 函数名称  | 
 OCI_Initialize  | 
| 
 头文件  | 
 #include  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 初始化OCILIB库,必须初始化后才能调用OCILIB库函数。 本函数只需调用一次,再次调用在函数内部自动忽略。  | 
| 
 函数声明  | 
 boolean OCI_Initialize ( POCI_ERROR const mtext unsigned );  | 
| 
 函数参数  | 
 err_handler,[输入]: 存放当执行数据库操作出错时的出错回调函数的内存指针,函数声明应为void err_handler (OCI_Error * err),err参数为错误码句柄。 如果本参数为NULL,表示不使用回调函数。  | 
| 
 lib_path,[输入]: 存放Oracle数据库的Oci动态库的上级路径字符串的内存指针,例如:C:\instantclient_11_2。 如果本参数为NULL,表示从ORACLE_HOME环境变量获取Oracle数据库的动态库的路径。 如果要使本参数生效,需要在编译OCILIB库时指定OCI_IMPORT_RUNTIME宏,否则本参数将自动忽略为NULL。  | 
|
| 
 mode,[输入]: 存放模式标记,可以为(用'|'选一至多个): OCI_ENV_DEFAULT宏(0x0000): 默认模式,本标记强制设置。 OCI_ENV_THREADED宏(0x0001): 如果设置本标记,表示启用多线程支持使用本库。 如果不设置本标记,表示单线程使用本库,不能多线程使用本库,如果多线程使用会出现意外。 OCI_ENV_CONTEXT宏(0x0002): 如果设置本标记,表示启用线程上下文错误处理,其实就是用线程上下文保存每一次数据库操作的错误信息,以便可以调用OCI_GetLastError()函数来查看上次数据库操作的错误信息。 如果不设置本标记,表示不保存数据库操作的错误信息,调用OCI_GetLastError()函数将无法查看到错误信息。 是否设置本标记不影响err_handler参数指定的出错回调函数。 OCI_ENV_EVENTS(0x0004): enables  | 
|
| 
 返回值  | 
 非0:成功。 0:失败,加载Oracle数据库的动态库或OCILIB动态库失败。  | 
| 
 错误码  | 
 无  | 
| 
 线程安全  | 
 否  | 
| 
 原子操作  | 
 否  | 
| 
 其他说明  | 
 本函数会加载Oracle数据库的动态库到调用进程。 如果程序不会再调用OCILIB库,可以调用OCI_Cleanup()函数释放OCILIB库。  | 
3.2.2 OCI_Cleanup
| 
 函数名称  | 
 OCI_Cleanup  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 释放OCILIB库,释放后OCILIB库函数将不能再调用。 释放后,如果需要再次调用OCILIB库,再次初始化OCILIB库即可。 只需在初始化OCILIB库后,不再调用OCILIB库时,调用本函数,未初始化OCILIB库就调用本函数无意义。  | 
| 
 函数声明  | 
 boolean OCI_Cleanup ( void );  | 
| 
 函数参数  | 
 无  | 
| 
 返回值  | 
 非0:成功。 0:失败。  | 
| 
 错误码  | 
 无  | 
| 
 线程安全  | 
 否  | 
| 
 原子操作  | 
 否  | 
| 
 其他说明  | 
 本函数会从调用进程卸载Oracle数据库的动态库。  | 
3.3 错误处理
3.3.1 OCI_GetLastError(未完成)
| 
 函数名称  | 
 OCI_GetLastError  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取最近一次调用OCILIB库的函数的错误或者警告。  | 
| 
 函数声明  | 
 OCI_Error * OCI_GetLastError ( void );  | 
| 
 函数参数  | 
 无  | 
| 
 返回值  | 
 非NULL:错误句柄,表示最近一次调用OCILIB库的函数出现了错误或者警告。 NULL:没有错误或者警告,表示最近一次调用OCILIB库的函数成功完成。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
3.3.2 OCI_ErrorGetString
| 
 函数名称  | 
 OCI_ErrorGetString  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 根据错误句柄,获取错误或警告的提示信息字符串。  | 
| 
 函数声明  | 
 const otext * OCI_ErrorGetString ( OCI_Error * );  | 
| 
 函数参数  | 
 err,[输入]: 存放错误句柄,不能为NULL。  | 
| 
 返回值  | 
 错误或警告的提示信息字符串的内存指针。  | 
| 
 错误码  | 
 无  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 提示信息字符串示例:ORA-12154: TNS: 无法解析指定的连接标识符  | 
3.3.3 OCI_ErrorGetType(未完成)
| 
 函数名称  | 
 OCI_ErrorGetType  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 根据错误句柄,获取错误类型,包括:Oracle错误、OCILIB错误、Warning警告。  | 
| 
 函数声明  | 
 unsigned int OCI_ErrorGetType( OCI_Error * )  | 
| 
 函数参数  | 
 err,[输入]: 存放错误句柄,不能为NULL。  | 
| 
 返回值  | 
 OCI_ERR_ORACLE:Oracle错误。 OCI_ERR_OCILIB:OCILIB错误。 OCI_ERR_WARNING:Warning警告。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
3.4 连接数据库
3.4.1 OCI_ConnectionCreate(未完成)
| 
 函数名称  | 
 OCI_ConnectionCreate  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 创建一个Oracle数据库的连接,并返回Oracle数据库连接句柄。  | 
| 
 函数声明  | 
 OCI_Connection * OCI_ConnectionCreate ( const mtext const mtext const mtext unsigned );  | 
| 
 函数参数  | 
 db,[输入]: 存放连接Oracle数据库的连接描述符字符串的内存指针,也可以直接存放连接描述符的配置字符串的内存指针。 连接描述符的配置在oracle的安装路径下的network/admin/tnsnames.ora中。 连接描述符的配置字符串就是tnsnames.ora文件中连接描述符等于符号后面所填写的内容。  | 
| 
 user,[输入]: 存放连接Oracle数据库的用户名字符串的内存指针。  | 
|
| 
 pwd,[输入]: 存放连接Oracle数据库的用户名对应的密码字符串的内存指针。  | 
|
| 
 mode,[输入]: 存放连接Oracle数据库的会话模式,可以为(选一至一个): OCI_SESSION_DEFAULT宏(0x0000): 以normal普通身份登陆Oracle数据库。 OCI_SESSION_SYSDBA宏(0x0002): 以SYSDBA系统管理员身份登陆Oracle数据库。 OCI_SESSION_SYSOPER宏(0x0004): 以SYSOPER系统操作员身份登陆Oracle数据库。 OCI_SESSION_XA宏(0x0001): Oracle XA OCILIB supports Pass to the Pass NULL Pass the Oracle XA The XA the XA If If As Oracle You still DO NOT USE  | 
|
| 
 返回值  | 
 非NULL:连接成功,Oracle数据库连接句柄。 NULL:连接失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 如果要断开连接,可以调用OCI_ConnectionFree()函数。  | 
3.4.2 OCI_ConnectionFree(未完成)
| 
 函数名称  | 
 OCI_ConnectionFree  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 断开一个Oracle数据库的连接。  | 
| 
 函数声明  | 
 boolean OCI_ConnectionFree ( OCI_Connection )  | 
| 
 函数参数  | 
 con,[输入]: 存放调用OCI_ConnectionCreate()函数返回的Oracle数据库连接句柄,不能为NULL。 本参数不能为错误的Oracle数据库连接句柄,否则会内存读写错误。  | 
| 
 返回值  | 
 非0:断开成功。 0:断开失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 ORA-0:指定的Oracle数据库连接句柄为NULL。  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
 Oracle数据库连接句柄在断开后就不能再使用了,再用就会报错误的Oracle数据库连接句柄。  | 
3.5 执行Statement
3.5.1 OCI_StatementCreate(未完成)
| 
 函数名称  | 
 OCI_StatementCreate  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 根据Oracle数据库连接句柄,创建Statement对象句柄。  | 
| 
 函数声明  | 
 OCI_Statement * OCI_StatementCreate ( OCI_Connection );  | 
| 
 函数参数  | 
 con,[输入]: 存放Oracle数据库连接句柄。  | 
| 
 返回值  | 
 非NULL:成功,Statement对象句柄。 NULL:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
 创建完Statement对象句柄,就可以开始准备、解析并执行SQL语句或PL/SQL代码块了。 执行一个SQL语句或PL/SQL代码块需要经过三个步骤:准备、解析、执行。具体如下: 准备就是将SQL语句或PL/SQL代码块存放到Statement对象句柄。 解析就是让Oracle数据库服务器将准备好的SQL语句或PL/SQL代码块进行分析是否可以被执行。 执行就是将已经解析通过后的SQL语句或PL/SQL代码块进行执行。 一个Statement对象句柄在经过准备、解析、执行步骤之后,如果还需要再执行任何SQL语句或PL/SQL代码块,必须要重新进行准备、解析、执行步骤,不能只准备一次,然后重复执行,否则会出现意外错误。 当Statement对象句柄不再使用时,应调用OCI_StatementFree()函数释放Statement对象句柄。  | 
3.5.2 OCI_StatementFree(未完成)
| 
 函数名称  | 
 OCI_StatementFree  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 释放Statement对象句柄。  | 
| 
 函数声明  | 
 OCI_EXPORT boolean OCI_StatementFree ( OCI_Statement );  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 返回值  | 
 非0:成功。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.5.3 OCI_Prepare(未完成)
| 
 函数名称  | 
 OCI_Prepare  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 向指定的Statement对象句柄里,准备一个SQL语句或PL/SQL代码块,该SQL语句或PL/SQL代码块不会被解析和执行。  | 
| 
 函数声明  | 
 boolean OCI_Prepare ( OCI_Statement const otext )  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 sql,[输入]: 存放SQL语句或PL/SQL代码块字符串的内存指针,不能为NULL。 如果是SQL语句,不能在末尾添加';'分号,例如:select * from dual。 如果是PL/SQL代码块,必须要在末尾添加';'分号,例如:begin dbms_output.new_line();  | 
|
| 
 返回值  | 
 非0:成功,或有警告,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 一般在调用本函数后,会再对SQL语句或PL/SQL代码块中的变量进行绑定,然后再调用OCI_Execute()函数解析并执行。如果不需要绑定变量的,一般会调用OCI_ExecuteStmt()函数来一次性完成准备、解析和执行。 如果SQL语句或PL/SQL代码块中有变量需要绑定,绑定变量的格式都是冒号后面加变量名,例如:insert  | 
3.5.4 OCI_Execute(未完成)
| 
 函数名称  | 
 OCI_Execute  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 根据指定的Statement对象句柄,解析并执行一个已经准备好的并绑定了变量的SQL语句或PL/SQL代码块。  | 
| 
 函数声明  | 
 boolean OCI_Execute ( OCI_Statement )  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 返回值  | 
 非0:成功,或有警告,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
3.5.5 OCI_ExecuteStmt(未完成)
| 
 函数名称  | 
 OCI_ExecuteStmt  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 向指定的Statement对象句柄里,准备、解析并执行一个SQL语句或PL/SQL代码块。  | 
| 
 函数声明  | 
 OCI_EXPORT boolean OCI_ExecuteStmt ( OCI_Statement const otext );  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 sql,[输入]: 存放SQL语句或PL/SQL代码块字符串的内存指针,不能为NULL。 如果是SQL语句,不能在末尾添加';'分号,例如:select * from dual。 如果是PL/SQL代码块,必须要在末尾添加';'分号,例如:begin dbms_output.new_line();  | 
|
| 
 返回值  | 
 非0:成功,或有警告,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
 如果成功执行了Select查询语句,就可以调用OCI_GetResultset()函数来获取结果集。  | 
3.5.6 OCI_Parse(未完成)
| 
 函数名称  | 
 OCI_Parse  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 向指定的Statement对象句柄里,准备并解析一个SQL语句或PL/SQL代码块,该SQL语句或PL/SQL代码块不会被执行。  | 
| 
 函数声明  | 
 boolean OCI_Parse ( OCI_Statement const otext )  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 sql,[输入]: 存放SQL语句或PL/SQL代码块字符串的内存指针,不能为NULL。 如果是SQL语句,不能在末尾添加';'分号,例如:select * from dual。 如果是PL/SQL代码块,必须要在末尾添加';'分号,例如:begin dbms_output.new_line();  | 
|
| 
 返回值  | 
 非0:成功,或有警告,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
3.6 控制Statement
3.6.1 OCI_GetFetchSize(未完成)
| 
 函数名称  | 
 OCI_GetFetchSize  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取指定的Statement对象句柄在每次抽取数据时从Oracle数据库服务器预抽取多少行的数据。  | 
| 
 函数声明  | 
 unsigned int OCI_GetFetchSize ( OCI_Statement )  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 返回值  | 
 预抽取多少行的数据,默认值为OCI_FETCH_SIZE宏。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 预抽取就是先从Oracle数据库服务器一次性抽取多行数据存放到缓存中,然后再从该缓存中依次抽取数据出来,当缓存中的数据抽取完毕时,又会从Oracle数据库服务器一次性抽取多行数据存放到缓存中,直到全部抽取完毕,这样可以加快抽取速度,减少Oracle数据库服务器的压力。  | 
3.6.2 OCI_SetFetchSize(未完成)
| 
 函数名称  | 
 OCI_SetFetchSize  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 修改指定的Statement对象句柄在每次抽取数据时从Oracle数据库服务器预抽取多少行的数据。  | 
| 
 函数声明  | 
 boolean OCI_SetFetchSize ( OCI_Statement unsigned )  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 size,[输入]: 存放预抽取多少行的数据的值。  | 
|
| 
 返回值  | 
 非0:成功,或有警告,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是,需启用多线程支持  | 
| 
 其他说明  | 
 本函数必须要在调用OCI_GetResultset()函数之前调用,否则将无效。 调大预抽取行数可以加快抽取速度,越打越快,一般为10000至50000能达到最快抽取速度。  | 
3.7 抽取结果集数据
3.7.1 OCI_GetResultset(未完成)
| 
 函数名称  | 
 OCI_GetResultset  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取根据Statement对象句柄执行Select查询语句后的结果集句柄。  | 
| 
 函数声明  | 
 OCI_Resultset * OCI_GetResultset ( OCI_Statement );  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 返回值  | 
 非0:成功,结果集句柄。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
 当结果集句柄不再使用时,应调用OCI_ReleaseResultsets()函数释放结果集句柄。  | 
3.7.2 OCI_ReleaseResultsets(未完成)
| 
 函数名称  | 
 OCI_ReleaseResultsets  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 释放结果集句柄。  | 
| 
 函数声明  | 
 boolean OCI_ReleaseResultsets ( OCI_Statement );  | 
| 
 函数参数  | 
 stmt,[输入]: 存放Statement对象句柄。  | 
| 
 返回值  | 
 非0:成功。 0:失败,通过err_handler()出错回调函数或调用OCI_GetLastError()函数查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.3 OCI_GetColumnCount(未完成)
| 
 函数名称  | 
 OCI_GetColumnCount  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取结果集句柄的字段个数。  | 
| 
 函数声明  | 
 unsigned int OCI_GetColumnCount ( OCI_Resultset );  | 
| 
 函数参数  | 
 rs,[输入]: 存放结果集句柄。  | 
| 
 返回值  | 
 字段个数。  | 
| 
 错误码  | 
 无  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.4 OCI_GetColumn(未完成)
| 
 函数名称  | 
 OCI_GetColumn  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取结果集句柄的指定索引的字段句柄。  | 
| 
 函数声明  | 
 OCI_Column * OCI_GetColumn ( OCI_Resultset unsigned );  | 
| 
 函数参数  | 
 rs,[输入]: 存放结果集句柄。  | 
| 
 index,[输入]: 存放字段索引的值,从1开始。  | 
|
| 
 返回值  | 
 非NULL:成功,返回值就是字段句柄。 NULL:失败,字段索引超出范围或发生错误,无法查看错误码。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.5 OCI_ColumnGetName(未完成)
| 
 函数名称  | 
 OCI_ColumnGetName  | 
| 
 头文件  | 
 #include <xxx.h> #include <xxx.h>  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取字段句柄的名称字符串。  | 
| 
 函数声明  | 
 const otext * OCI_ColumnGetName ( OCI_Column );  | 
| 
 函数参数  | 
 col,[输入]: 存放字段句柄。  | 
| 
 返回值  | 
 名称字符串的内存指针。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.6 OCI_ColumnGetSQLType(未完成)
| 
 函数名称  | 
 OCI_ColumnGetSQLType  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取字段句柄的类型字符串,只有类型,没有精度。 例如:VARCHAR2。  | 
| 
 函数声明  | 
 const otext * OCI_ColumnGetSQLType ( OCI_Column )  | 
| 
 函数参数  | 
 col,[输入]: 存放字段句柄。  | 
| 
 返回值  | 
 类型字符串的内存指针。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.7 OCI_ColumnGetFullSQLType(未完成)
| 
 函数名称  | 
 OCI_ColumnGetFullSQLType  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取字段句柄的完整类型字符串,包括类型和精度。 注意:VARCHAR2类型的字段会写成VARCHAR,但是不影响,因为Oracle中VARCHAR和VARCHAR2是同一种类型。 例如:VARCHAR(30)。  | 
| 
 函数声明  | 
 unsigned int OCI_ColumnGetFullSQLType ( OCI_Column otext * buffer, unsigned );  | 
| 
 函数参数  | 
 col,[输入]: 存放字段句柄。  | 
| 
 buffer,[输入]: 存放用于存放字段完整类型字符串的内存指针。  | 
|
| 
 len,[输入]: 存放用于存放字段完整类型字符串的内存大小。  | 
|
| 
 返回值  | 
 向用于存放字段完整类型字符串的内存写入了多少长度的字符,单位字节,不包括'\0'结束符。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.8 OCI_ColumnGetSize(未完成)
| 
 函数名称  | 
 OCI_ColumnGetSize  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取字段句柄的大小,不同数据类型单位不一样。 VARCHAR2类型:单位为字符个数,和精度一致。 NUMBER类型:单位为字节,通常都是22个字节。 DATE类型:单位为字节,通常都是7个字节。 TIMESTAMP类型:单位为字节,通常都是11个字节,精度为0是7个字节。 TIMESTAMP TIMESTAMP  | 
| 
 函数声明  | 
 unsigned int OCI_ColumnGetSize ( OCI_Column );  | 
| 
 函数参数  | 
 col,[输入]: 存放字段句柄。  | 
| 
 返回值  | 
 返回值1:返回值说明。 返回值2:返回值说明。 ……  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
3.7.9 OCI_ColumnGetNullable(未完成)
| 
 函数名称  | 
 OCI_ColumnGetNullable  | 
| 
 头文件  | 
 #include "..\LibOciLib\ocilib.h"  | 
| 
 库文件  | 
 #pragma comment(lib, "xxx.lib")  | 
| 
 函数功能  | 
 获取字段句柄的值可否为NULL。  | 
| 
 函数声明  | 
 boolean OCI_ColumnGetNullable ( OCI_Column );  | 
| 
 函数参数  | 
 col,[输入]: 存放字段句柄。  | 
| 
 返回值  | 
 非0:可以为NULL。 0:不可以为NULL。  | 
| 
 错误码  | 
 EXXXX:错误码说明。 EXXXX:错误码说明。 ……  | 
| 
 线程安全  | 
 是,需启用多线程支持  | 
| 
 原子操作  | 
 是  | 
| 
 其他说明  | 
LibOciLib使用说明(2017-1-26更新)的更多相关文章
- 团队作业4——第一次项目冲刺(Alpha版本)2017.4.26
		
2017.04.26 天气热. 时间:上午 9:35 ---10:10分 地点:陆大304实验室 会议内容:今天将昨天的的一些问题进行了讨论,以及针对助教提出的问题进行了分析,是因为我们昨天经过讨论后 ...
 - Xamarin 2017.11.9更新
		
Xamarin 2017.11.9更新 本次更新主要针对Xamarin.iOS,适配了iOS 11.1和Xcode 9.1.Visual Studio 2017升级到15.4.3获得新功能.Visu ...
 - Xamarin 2017.11.1更新
		
Xamarin 2017.11.1更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4.2获得新功能.Visual Studio 2015需要工具-选项-Xamar ...
 - Xamarin 2017.10.9更新
		
Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...
 - Xamarin 2017.9.19更新
		
Xamarin 2017.9.19更新 本次更新是添加Xamarin.iOS对iOS 11和Xcode 9的支持.Visual Studio 2017升级到15.3.5获得更新功能.Visual ...
 - jetbrains idea/webstorm等(注册,激活,破解码,一起支持正版,最新可用)(2017.3.16更新)【转】
		
选择 License server (2017.3.16更新) http://idea.imsxm.com/ 详细请参考: http://www.cnblogs.com/ys-wuhan/p/584 ...
 - wdcp 使用说明总结(持续更新中。。。)
		
wdcp 使用说明总结(持续更新中...) 1.移动文件时,如果是上一层,直接填写../即可
 - VS Code 调教日记(2022.6.26更新)
		
VS Code 调教日记(2022.6.26更新) 基于msys2的MinGW-w64 GCC的环境配置 下载并安装msys2 到路径...msys2安装路径...\msys64\etc\pacman ...
 - iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26
		
1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...
 - iOS 实现UIImageView 的不停的旋转(更新:2017.7.26)
		
1.先创建一个UIImageView. - (void)createImageView { UIImageView *imageView = [[UIImageView alloc] initWith ...
 
随机推荐
- 如何将mp4文件解复用并且解码为单独的.yuv图像序列以及.pcm音频采样数据?
			
一.初始化解复用器 在音视频的解复用的过程中,有一个非常重要的结构体AVFormatContext,即输入文件的上下文句柄结构,代表当前打开的输入文件或流.我们可以将输入文件的路径以及AVFormat ...
 - 为什么 kubelet 不使用容器化部署?
			
每日一问系列 为什么 kubelet 不使用容器化部署? 通过脚本(shell/ansible 等)在节点上部署 kubelet 服务时,涉及 kubelet 进程 service 启动配置.证书等, ...
 - .Net8的AOT引导程序BootStrap
			
前言 .Net8的本地预编机器码AOT,它几乎进行了100%的自举.微软为了摆脱C++的钳制,做了很多努力.也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等.而需要C++做的,也就仅仅是引 ...
 - linux内核Makefile中的变量build--- 过渡篇(五)
			
一. kbuild系统主要涉及的几个文件 文件名 作用 Makefile 内核源代码顶层目录的Makefile文件 scripts/Makefile.build 通常在进行递归make时会用到的Mak ...
 - 【译】Visual Studio 2022 中的 Web API 开发
			
在 Visual Studio 2022 中,Web 开发人员的主要场景之一是使用 ASP.NET Core 创建 Web API.在 Visual Studio 2022 17.6 的最新预览版中, ...
 - NativeBuferring——一种零分配的数据类型[上篇]
			
之前一个项目涉及到针对海量(千万级)实时变化数据的计算,由于对性能要求非常高,我们不得不将参与计算的数据存放到内存中,并通过检测数据存储的变化实时更新内存的数据.存量的数据几乎耗用了上百G的内存,再加 ...
 - 原来TypeScript中的接口和泛型这么好理解
			
"接口"和"泛型"是 TypeScript 相比于 JavaScript 新增的内容,都用于定义数据类型 前面两篇文章总结了TypeScript中的 类型注解. ...
 - 从redis未授权访问到获取服务器权限
			
从redis未授权访问到获取服务器权限 好久没写博客了,博客园快荒芜了.赶紧再写一篇,算是一个关于自己学习的简要的记录把. 这里是关于redis未授权访问漏洞的一篇漏洞利用: 首先是redis,靶场搭 ...
 - Web开发框架 WebBuilder 9 发布
			
WebBuilder 是一款强大,全面和高效的Web开发框架 .基于浏览器的集成开发环境,智能化的设计,能轻松完成常规桌面应用和面向手机等的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用的 ...
 - 4.2 C++ Boost 内存池管理库
			
Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...