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 long long) |
big_uint (unsigned long long) |
||
|
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 ZONE |
OCI_Timestamp * |
OCI_TIMESTAMP_TZ |
ocilib::Timestamp |
WithTimeZone |
|
TIMESTAMP WITH LOCAL TIME ZONE |
OCI_Timestamp * |
OCI_TIMESTAMP_LTZ |
ocilib::Timestamp |
WithLocalTimeZone |
|
INTERVAL YEAR TO MONTH |
OCI_Interval * |
OCI_INTERVAL_YM |
ocilib::Interval |
YearMonth |
|
INTERVAL DAY TO SECOND |
OCI_Interval * |
OCI_INTERVAL_DS |
ocilib::Interval |
DaySecond |
|
Character LOB |
OCI_Lob * |
OCI_CLOB |
ocilib::Clob |
LobCharacter |
|
National Character LOB |
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 TABLE |
OCI_Coll * |
OCI_COLL_INDEXED_TABLE |
ocilib::Collection |
IndexedTable |
|
NAMED DATATYPE (TYPE, OBJECT) |
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 "..\LibOciLib\ocilib.h" |
|
庫文件 |
#pragma comment(lib, "xxx.lib") |
|
函數功能 |
初始化OCILIB庫,必須初始化后才能調用OCILIB庫函數。 本函數只需調用一次,再次調用在函數內部自動忽略。 |
|
函數聲明 |
boolean OCI_Initialize ( POCI_ERROR err_handler, const mtext * lib_path, unsigned int mode ); |
|
函數參數 |
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 events for subscription, HA Events, AQ notifications。 |
|
|
返回值 |
非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 ); |
|
函數參數 |
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 ) |
|
函數參數 |
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 * db, const mtext * user, const mtext * pwd, unsigned int mode ); |
|
函數參數 |
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 support OCILIB supports Oracle XA connectivity. In order to get a connection using the XA interface : Pass to the parameter 'db' the value of the 'DB' parameter of the given XA connection string pased to the Transaction Processing Monitor (TPM) Pass NULL to the 'user' and 'pwd' parameters Pass the value OCI_SESSION_XA to parameter 'mode'
Oracle XA Connection String The XA connection string used in a transaction monitor to connect to Oracle must be compatible with OCILIB : the XA parameter 'Objects' MUST be set to 'true' If OCI_ENV_THREADED is passed to OCI_Initialize(), the XA parameter 'Threads' must be set to 'true', otherwise to 'false' If OCI_ENV_EVENTS is passed to OCI_Initialize(), the XA parameter 'Events' must be set to 'true', otherwise to 'false' As Oracle does not support Unicode UTF16 characterset through the XA interface, Only OCI_CHARSET_ANSI builds of OCILIB can be used You still can use UTF8 if the NLS_LANG environment variable is set with a valid UTF8 NLS value DO NOT USE OCI_CHARSET_MIXED or OCI_CHARSET_WIDE OCILIB builds with XA connections |
|
|
返回值 |
非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 ) |
|
函數參數 |
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 ); |
|
函數參數 |
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 ); |
|
函數參數 |
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 * stmt, const otext * sql ) |
|
函數參數 |
stmt,[輸入]: 存放Statement對象句柄。 |
|
sql,[輸入]: 存放SQL語句或PL/SQL代碼塊字符串的內存指針,不能為NULL。 如果是SQL語句,不能在末尾添加';'分號,例如:select * from dual。 如果是PL/SQL代碼塊,必須要在末尾添加';'分號,例如:begin dbms_output.new_line(); end;。 |
|
|
返回值 |
非0:成功,或有警告,通過err_handler()出錯回調函數或調用OCI_GetLastError()函數查看錯誤碼。 0:失敗,通過err_handler()出錯回調函數或調用OCI_GetLastError()函數查看錯誤碼。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是,需啟用多線程支持 |
|
原子操作 |
是,需啟用多線程支持 |
|
其他說明 |
一般在調用本函數后,會再對SQL語句或PL/SQL代碼塊中的變量進行綁定,然后再調用OCI_Execute()函數解析并執行。如果不需要綁定變量的,一般會調用OCI_ExecuteStmt()函數來一次性完成準備、解析和執行。 如果SQL語句或PL/SQL代碼塊中有變量需要綁定,綁定變量的格式都是冒號后面加變量名,例如:insert into table values (:var1, :var2)。 |
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 ) |
|
函數參數 |
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 * stmt, const otext * sql ); |
|
函數參數 |
stmt,[輸入]: 存放Statement對象句柄。 |
|
sql,[輸入]: 存放SQL語句或PL/SQL代碼塊字符串的內存指針,不能為NULL。 如果是SQL語句,不能在末尾添加';'分號,例如:select * from dual。 如果是PL/SQL代碼塊,必須要在末尾添加';'分號,例如:begin dbms_output.new_line(); end;。 |
|
|
返回值 |
非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 * stmt, const otext * sql ) |
|
函數參數 |
stmt,[輸入]: 存放Statement對象句柄。 |
|
sql,[輸入]: 存放SQL語句或PL/SQL代碼塊字符串的內存指針,不能為NULL。 如果是SQL語句,不能在末尾添加';'分號,例如:select * from dual。 如果是PL/SQL代碼塊,必須要在末尾添加';'分號,例如:begin dbms_output.new_line(); end;。 |
|
|
返回值 |
非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 ) |
|
函數參數 |
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 * stmt, unsigned int size ) |
|
函數參數 |
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 ); |
|
函數參數 |
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 ); |
|
函數參數 |
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 ); |
|
函數參數 |
rs,[輸入]: 存放結果集句柄。 |
|
返回值 |
字段個數。 |
|
錯誤碼 |
無 |
|
線程安全 |
是,需啟用多線程支持 |
|
原子操作 |
是 |
|
其他說明 |
|
3.7.4 OCI_GetColumn(未完成)
|
函數名稱 |
OCI_GetColumn |
|
頭文件 |
#include "..\LibOciLib\ocilib.h" |
|
庫文件 |
#pragma comment(lib, "xxx.lib") |
|
函數功能 |
獲取結果集句柄的指定索引的字段句柄。 |
|
函數聲明 |
OCI_Column * OCI_GetColumn ( OCI_Resultset * rs, unsigned int index ); |
|
函數參數 |
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 ); |
|
函數參數 |
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 ) |
|
函數參數 |
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 * col, otext * buffer, unsigned int len ); |
|
函數參數 |
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 WITH LOCAL TIME ZONE類型:單位為字節,通常都是11個字節,精度為0是7個字節。 TIMESTAMP WITH TIME ZONE類型:單位為字節,通常都是13個字節。 |
|
函數聲明 |
unsigned int OCI_ColumnGetSize ( OCI_Column * col ); |
|
函數參數 |
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 ); |
|
函數參數 |
col,[輸入]: 存放字段句柄。 |
|
返回值 |
非0:可以為NULL。 0:不可以為NULL。 |
|
錯誤碼 |
EXXXX:錯誤碼說明。 EXXXX:錯誤碼說明。 …… |
|
線程安全 |
是,需啟用多線程支持 |
|
原子操作 |
是 |
|
其他說明 |
|

浙公網安備 33010602011771號