LibOciLib使用說明(2017-1-26更新)

LibOciLib使用說明git

整理者:赤勇玄心行天道github

QQ:280604597sql

Email:280604597@qq.com數據庫

你們有什麼不明白的地方,或者想要詳細瞭解的地方能夠聯繫我,我會認真回覆的!緩存

你能夠隨意轉載,無需註明出處!安全

寫文檔實屬不易,我但願你們能捐助我,繼續支持個人工做,我會繼續努力幫助你們,金額隨意,1塊也行,感謝!服務器

支付寶:280604597@qq.com多線程

QQ紅包oracle

 

OCILIB的QQ羣:553666676函數

 

一、  複製解決方案根目錄下的「LibOciLib」文件夾到調用程序的解決方案根目錄下。

二、  調用程序需添加代碼:

#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

三、  編譯調用程序的項目。


 


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

……

線程安全

是,需啓用多線程支持

原子操做

其餘說明

相關文章
相關標籤/搜索