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]

ujvkaxbbfxq.png

f68f2add0b68e4f9810432fce46917b7.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值