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中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android mysql 图片_android sqlite添加图片到数据库

sqlite图片是怎么储存的呢?其实是二进制的方式存储的blob代表使用二进制储存 (更多类型参考:数据库简介)在创建表的地方,VALUE_PIC代表存储图片字段,blob代表这个字段是以二进制储存的。/*创建表语句 语句对大小写不敏感 create table 表名(字…

MCU为什么内部不集成晶振

01MCU为什么不集成晶振本文将用STM32代替MCU。原因1:早些年,芯片的生产制作工艺也许还不能够将晶振做进芯片内部,但是现在可以了。这个问题主要还是实用性和成本决定的。实用性:如果封装进入STM32内部,不利于不同客户更…

cad中怎么随意移动图形_cad中怎么随意移动图形_绘制CAD图纸的过程中CAD快捷键失灵了怎么办?...

很多人在使用笔记本绘制CAD图纸的过程中,当用到CAD快捷键的时候会发现部分CAD快捷键无法正常使用,比如按F8后并没有切换成正交状态,而是出来了连接投影仪的选项,而且其他的快捷键也无法使用了,如下图所示。在以前老的笔…

GitHub的嵌入式开源项目

来源:嵌入式大杂烩关于GitHub,可能很多人误以为这是互联网人的专属,其实并不是,那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目(像RT-Thread、AWTK等大家都熟知的就不介绍了):A…

项目开发日志:Build AssetBundle——SpriteAtlas(已解惑)

项目信息:平台-AndroidUnity编辑器版本-2018.2.5f1状况1:真机状况下引用到图集下的sprite的UI显示出错。(图集被打成AB包且勾选了Include in Build).在我们的测试下发现了以下两个解决方案:(当然我觉得第二…

Sangfor上网行为管理单点登录配置

单点登录功能介绍: 当用户成功登录到第三方认证服务器时,自动通过AC的认证,而无需再次输入用户名和密码。 优点: 用户只需要输入一次账号和密码,即可自动通过AC的认证,避免账号和密码的重复输入&#xff0c…

教你精确计算 I2C 上拉电阻阻值

I2C 总线能挂多少设备?理论上:7-bit address :2 的 7 次方,能挂 128 个设备。10-bit address :2 的 10 次方,能挂 1024 个设备。当然,要把预留设备地址去除,7 bit 协议规定了 8个预留…

原型设计+用户规格说明书

用户规格说明书 作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具: 墨刀 原型模型链接:https://modao.cc/app/6a5fcc03e409ffe37cfcdb9cb06914271744f131 学号1:362 何永康 学号2&#xff…

什么集成mysql_mysql集成部署

经常听说mysql数据库是集成在系统中,也一直不太明白集成的概念。今天才明白集成的概念就是将mysql所有的文件放到一个文件夹下放到系统中,也就是将mysql采用目录迁移部署的方式进行安装。在上一篇研究了mysql的数据存储结构之后,也研究了mysq…

一文让你了解RT-Thread

前言要学习一项新知识或新的技能,首先要对其有个初步了解,然后再逐步学习如何运用它。本文作为快速入门 RT-Thread 系列文章的第一篇,首先介绍一下,我当时是如何学习 RT-Thread 的,以及参与官方组织的活动的情况&#…

创建python虚拟环境

一 windows下如何构建虚拟环境如果系统中只有python2或只有python3,可以直接打开命令行,输入pip install virtualenv 来下载创建虚拟环境的包(如果提示pip不是内部命令,把python文件下的Scripts的文件路径加入计算机环境变量即可可) 1. 选择一…

电源开关上的 | 和 O 究竟代表了什么?

大家好,我是写代码的篮球球痴,转发张老师的一篇文章。几乎所有的电器、灯具和插座上只要带有电源开关必然会出现“|”和“O”两个符号。如果只看符号判断,“|”和“O”到底代表什么含义呢?能分清:哪个是电路联通,哪个是…

重庆大二学生花了6年写出了操作系统

一直以来,国内操作系统都是弱势的地方,可能是国情原因吧,事实上国内也有不少人想改变这种格局,一直以来,笔者的朋友也在一直为这个方向努力,xbook内核,作者花了6年时间,从初中开始就…

辉哥给rockchip修复了一个内存溢出问题

还是周末我也不想说周末,但是不是周末的话,可能也没有特别清净的时间来处理困难的问题。这周末我是要加班的,加班的前一个晚上,我领导找我们吃了一个便饭,聊了很多东西,这篇文章我就不说了,会在…

MVC(dotnet)

一天中吹牛的时间到了,纠正一下自己的思维,要是能让过客收益那是我的荣幸。 前段时间就三层&MVC被一些网友搅的一头雾水....管他萝卜酸菜吃下去了才是自己的。 首先我要说明的是MVC只是一个表现模式,是一种软件架构模式,而三层…

微信小程序轮播图中间变大_微信小程序实现带放大效果的轮播图

本文实例为大家分享了微信小程序实现带放大效果的轮播图,供大家参考,具体内容如下效果如图WXMLWXSS.Carousel{margin-top: 49px;background-color: #fff;}.swiper-container{position: relative;}.swiper-container .swiper{padding-top: 8px;height: 38…

跟我领导吃饭

上篇文章说,下篇文章会说跟我们领导吃饭的事情。我领导是我上上上家公司的领导,不是现在TC的领导。自从离职后,我们差不多6个月没再见面,那时候我想跳槽,是因为得到消息说他要走,我刚开始不相信&#xff0c…

tyvj 1391 走廊泼水节【最小生成树】By cellur925

题目传送门 题意简化:给你一棵树,要求你加边使它成为完全图(任意两点间均有一边相连) ,满足原来的树是这个图的最小生成树。求加边的价值最小是多少。 考虑Kruskal的过程,我们每次找一条最短的,…

支持向量机-SVM-最优化公式推导记录

1. 简述 SVM涉及的东西很多,如果要理解全面的话,要理解经验风险与置信风险,VC维理论,推导出最优化公式,最优化求解的拉格朗日解法,核函数,等等方面的内容,当前对SVM理解太少&#xf…

django 函数装饰器 变为 类装饰器

aaa 转载于:https://www.cnblogs.com/pythonClub/p/9789190.html