欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

oci mysql_Oracle常用的OCI函数

发布时间:2023/12/20 数据库 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 oci mysql_Oracle常用的OCI函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 sword OCIEnvInit ( OCIEnv **envhpp, ub4 mode, size_t xtramemsz, dvoid **usrmempp ); 注: 在8i以后,可用OCIEnvCreate一个函数就可以初始化环境了,相当于OCIInitialize+ OCIEnvInit 2.申请/

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

sword OCIEnvInit (

OCIEnv **envhpp,

ub4 mode,

size_t xtramemsz,

dvoid **usrmempp

);

注:

在8i以后,可用OCIEnvCreate一个函数就可以初始化环境了,相当于OCIInitialize+ OCIEnvInit

2.申请/释放句柄

sword OCIHandleAlloc(

CONST dvoid *parenth, //新申请句柄的父句柄,一般为OCI环境句柄

Dvoid **hndlpp, //申请的新句柄

Ub4 type, type, //句柄类型

Size_t xtramem_sz, //申请的内存数

Dvoid **usrmempp //申请到的内存块指针

)

注:

一般需要申请的句柄有:

服务器句柄OCIServer, 句柄类型OCI_HTYPE_SERVER

错误句柄OCIError,用于捕获OCI错误信息, 句柄类型OCI_HTYPE_ERROR

事务句柄OCISession, 句柄类型OCI_HTYPE_SESSION

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

SQL语句句柄OCIStmt, 句柄类型OCI_HTYPE_STMT

eg: 申请一个错误句柄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.读取/设置句柄属性

sword OCIAttrSet(

dvoid *trgthndlp, //需设置的句柄名

ub4 trghndltyp, //句柄类型

dvoid *attributep, //设置的属性名

ub4 size, //属性值长度

ub4 attrtype, //属性类型

OCIError *errhp //错误句柄

)

注:一般要设置的属性有:

服务器实例:

句柄类型OCI_HTYPE_SVCCTX,属性类型OCI_ATTR_SERVER

连接数据的用户名:

句柄类型OCI_HTYPE_SESSION,属性类型OCI_ATTR_USERNAME

用户密码

句柄类型OCI_HTYPE_SESSION,属性类型OCI_ATTR_PASSWORD

事务:

句柄类型OCI_HTYPE_SVCCTX,属性类型OCI_ATTR_SESSION

eg:设置用户名和密码

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, //属性值长度

ub4 attrtype, //属性类型

OCIError *errhp //错误句柄

)

4.连接/断开服务器

多用户方式连接:

sword OCIServerAttach(

OCIServer *srvhp,//未初始化的服务器句柄

OCIError *errhp,

CONST text *dblink,//服务器SID

sb4 dblink_len,

ub4 mode //=OCI_DEFAULT,系统环境将设为阻塞方式

);

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.开始/结束一个会话

先认证用户再建立一个会话连接

sword OCISessionBegin (

OCISvcCtx *svchp, //服务环境句柄

OCIError *errhp,

OCISession *usrhp, //用户会话句柄

ub4 credt, //认证类型

ub4 mode //操作模式

);

*认证类型:

OCI_CRED_RDBMS:用数据库用户名和密码进行认证,则先要设置OCI_ATTR_USERNAME和OCI_ATTR_PASSWORD属性

OCI_CRED_EXT:外部认证,不需要设置用户和密码

OCI_DEFAULT:用户会话环境只能被指定的服务器环境句柄所设置

OCI_SYSDBA:用户要具有sysdba权限

OCI_SYSOPER:用户要具有sysoper权限

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.读取错误信息

sword OCIErrorGet (

dvoid *hndlp, //错误句柄

ub4 recordno,//从那里读取错误记录,从1开始

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

sb4 *errcodep, //错误号

text *bufp, //错误内容

ub4 bufsiz, //bufp长度

ub4 type //传递的错误句柄类型

=OCI_HTYPE_ERROR:错误句柄

=OCI_HTYPE_ENV:环境句柄

);

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]

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

总结

以上是生活随笔为你收集整理的oci mysql_Oracle常用的OCI函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。