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:錯誤碼說明。

……

線程安全

是,需啟用多線程支持

原子操作

其他說明

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM