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库的后备,通常被称为准标准 ...