日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

oci mysql_Oracle常用的OCI函数

發(fā)布時(shí)間:2023/12/20 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oci mysql_Oracle常用的OCI函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎進(jìn)入Oracle社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入 sword OCIEnvInit ( OCIEnv **envhpp, ub4 mode, size_t xtramemsz, dvoid **usrmempp ); 注: 在8i以后,可用OCIEnvCreate一個(gè)函數(shù)就可以初始化環(huán)境了,相當(dāng)于OCIInitialize+ OCIEnvInit 2.申請(qǐng)/

歡迎進(jìn)入Oracle社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入

sword OCIEnvInit (

OCIEnv **envhpp,

ub4 mode,

size_t xtramemsz,

dvoid **usrmempp

);

注:

在8i以后,可用OCIEnvCreate一個(gè)函數(shù)就可以初始化環(huán)境了,相當(dāng)于OCIInitialize+ OCIEnvInit

2.申請(qǐng)/釋放句柄

sword OCIHandleAlloc(

CONST dvoid *parenth, //新申請(qǐng)句柄的父句柄,一般為OCI環(huán)境句柄

Dvoid **hndlpp, //申請(qǐng)的新句柄

Ub4 type, type, //句柄類型

Size_t xtramem_sz, //申請(qǐng)的內(nèi)存數(shù)

Dvoid **usrmempp //申請(qǐng)到的內(nèi)存塊指針

)

注:

一般需要申請(qǐng)的句柄有:

服務(wù)器句柄OCIServer, 句柄類型OCI_HTYPE_SERVER

錯(cuò)誤句柄OCIError,用于捕獲OCI錯(cuò)誤信息, 句柄類型OCI_HTYPE_ERROR

事務(wù)句柄OCISession, 句柄類型OCI_HTYPE_SESSION

上下文句柄OCISvcCtx, 句柄類型OCI_HTYPE_SVCCTX

SQL語(yǔ)句句柄OCIStmt, 句柄類型OCI_HTYPE_STMT

eg: 申請(qǐng)一個(gè)錯(cuò)誤句柄OCIError

swResult = OCIHandleAlloc(envhpp, (dvoid *)& errhp, OCI_HTYPE_ERROR, 0, NULL);

if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)

{

return FALSE;

}

釋放句柄

sword OCIHandleFree(

dvoid *hndlp, //要釋放的句柄

ub4 type //句柄類型

)

eg:

OCIHandleFree(stmtp, OCI_HTYPE_STMT)

3.讀取/設(shè)置句柄屬性

sword OCIAttrSet(

dvoid *trgthndlp, //需設(shè)置的句柄名

ub4 trghndltyp, //句柄類型

dvoid *attributep, //設(shè)置的屬性名

ub4 size, //屬性值長(zhǎng)度

ub4 attrtype, //屬性類型

OCIError *errhp //錯(cuò)誤句柄

)

注:一般要設(shè)置的屬性有:

服務(wù)器實(shí)例:

句柄類型OCI_HTYPE_SVCCTX,屬性類型OCI_ATTR_SERVER

連接數(shù)據(jù)的用戶名:

句柄類型OCI_HTYPE_SESSION,屬性類型OCI_ATTR_USERNAME

用戶密碼

句柄類型OCI_HTYPE_SESSION,屬性類型OCI_ATTR_PASSWORD

事務(wù):

句柄類型OCI_HTYPE_SVCCTX,屬性類型OCI_ATTR_SESSION

eg:設(shè)置用戶名和密碼

char username[20],passwd[20];

strcpy(username,”tiger”)

strcpy(passwd,”cotton”)

swResult = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text*) username, strlen(username),

OCI_ATTR_USERNAME, errhp);

if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)

return FALSE;

swResult = OCIAttrSet(usrhp, OCI_HTYPE_SESSION, (text*) passwd, strlen(passwd),

OCI_ATTR_PASSWORD, errhp);

if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)

return FALSE;

sword OCIAttrGet(

dvoid *trgthndlp, //需讀取的句柄名

ub4 trghndltyp, //句柄類型

dvoid *attributep, //讀取的屬性名

ub4 *sizep, //屬性值長(zhǎng)度

ub4 attrtype, //屬性類型

OCIError *errhp //錯(cuò)誤句柄

)

4.連接/斷開(kāi)服務(wù)器

多用戶方式連接:

sword OCIServerAttach(

OCIServer *srvhp,//未初始化的服務(wù)器句柄

OCIError *errhp,

CONST text *dblink,//服務(wù)器SID

sb4 dblink_len,

ub4 mode //=OCI_DEFAULT,系統(tǒng)環(huán)境將設(shè)為阻塞方式

);

sword OCIServerDetach (

OCIServer *srvhp,

OCIError *errhp,

ub4 mode //OCI_DEFAULT

);

單用戶方式連接:

sword OCILogon (

OCIEnv *envhp,

OCIError *errhp,

OCISvcCtx **svchp,

CONST text *username,

ub4 uname_len,

CONST text *password,

ub4 passwd_len,

CONST text *dbname,

ub4 dbname_len

);

sword OCILogoff (

OCISvcCtx *svchp

OCIError *errhp

);

5.開(kāi)始/結(jié)束一個(gè)會(huì)話

先認(rèn)證用戶再建立一個(gè)會(huì)話連接

sword OCISessionBegin (

OCISvcCtx *svchp, //服務(wù)環(huán)境句柄

OCIError *errhp,

OCISession *usrhp, //用戶會(huì)話句柄

ub4 credt, //認(rèn)證類型

ub4 mode //操作模式

);

*認(rèn)證類型:

OCI_CRED_RDBMS:用數(shù)據(jù)庫(kù)用戶名和密碼進(jìn)行認(rèn)證,則先要設(shè)置OCI_ATTR_USERNAME和OCI_ATTR_PASSWORD屬性

OCI_CRED_EXT:外部認(rèn)證,不需要設(shè)置用戶和密碼

OCI_DEFAULT:用戶會(huì)話環(huán)境只能被指定的服務(wù)器環(huán)境句柄所設(shè)置

OCI_SYSDBA:用戶要具有sysdba權(quán)限

OCI_SYSOPER:用戶要具有sysoper權(quán)限

Eg:

swResult = OCISessionBegin(svchp, errh,usrhp, OCI_CRED_RDBMS, OCI_DEFAULT);

if(swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)

return FALSE;

sword OCISessionEnd (

OCISvcCtx *svchp,

OCIError *errhp,

OCISession *usrhp,

ub4 mode );

6.讀取錯(cuò)誤信息

sword OCIErrorGet (

dvoid *hndlp, //錯(cuò)誤句柄

ub4 recordno,//從那里讀取錯(cuò)誤記錄,從1開(kāi)始

text *sqlstate,//已取消,=NULL

sb4 *errcodep, //錯(cuò)誤號(hào)

text *bufp, //錯(cuò)誤內(nèi)容

ub4 bufsiz, //bufp長(zhǎng)度

ub4 type //傳遞的錯(cuò)誤句柄類型

=OCI_HTYPE_ERROR:錯(cuò)誤句柄

=OCI_HTYPE_ENV:環(huán)境句柄

);

eg:

ub4 ub4RecordNo = 1;

OCIError* hError

sb4 sb4ErrorCode;

char sErrorMsg[1024];

if (OCIErrorGet(hError, ub4RecordNo++, NULL, &sb4ErrorCode, (OraText*) sErrorMsg, sizeof(sErrorMsg), OCI_HTYPE_ERROR) == OCI_SUCCESS)

printf(“error msg:%s\n”, sErrorMsg);

[1] [2] [3] [4] [5]

本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!

總結(jié)

以上是生活随笔為你收集整理的oci mysql_Oracle常用的OCI函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。