oci mysql_Oracle常用的OCI函数
歡迎進(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)題。
- 上一篇: 分享NI卸载工具(免费)
- 下一篇: MySQL函数笔记_MySQL笔记之数学