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,一经查实,立即删除!

相关文章

sort注意事项

虽然是小事但是还是得注意一下:sort 区间左开右闭 从0开始 e.g: 10 9 8 7 6 5 4 3 2 1 sort(a6,a11) 区间 6 - 10 sort(a6,a10) 区间 6 - 9转载于:https://www.cnblogs.com/asdic/p/9758532.html

C语言预处理功能——关于字符串化和符号粘贴

在C语言开发中,宏定义是一个非常有用的工具,它可以使我们的代码更容易理解,更容易维护。如查一个常量在多处被使用,且今后可能会根据不同需要而修改的话,将其define一下那是再好不过了。除此之外,宏定义还有…

memmove()

memcpy()只是memmove()的一个子集 memcpy()在执行内存重叠的情况下时,就会发生错误,而memmove()不会 void *memmove(void *dest, const void *src, size_t count) {assert((dest!0)&&(src!0));unsigned char *pdest (char * )dest;unsigned char…

LINUX SHELL的神器,sed

我们知道,Vim 采用的是交互式文本编辑模式,你可以用键盘命令来交互性地插入、删除或替换数据中的文本。但本节要讲的 sed 命令不同,它采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供…

mysql使用shell脚本部署_shell脚本部署mysql主从

centos6两台Master IP:192.168.88.152Slave IP:192.168.88.153以下都是在主机上操作两机配置免密登录ssh-keygen -t rsassh-copy-id root192.168.88.153编写mysql_master脚本vim mysql_mster.sh#!/bin/bashservice iptables stopsetenforce 0yum -y inst…

ES6 数组、对象的扩展

8. 数组的扩展 扩展运算符(...),将一个数组转为用逗号分隔的参数序列。 复制数组 const a2[...a1]合并数组 [...arr1, ...arr2, ...arr3]; arr1.concat(arr2, arr3);// ES5 的合并数组 这是浅拷贝,如果修改了原数组的成员,会同步反…

MVVM及MVVMLight相关资料

(1)dwahlin (2)http://blog.csdn.net/duanzilin/article/category/816515

我损失几百万换来的教训

大家好,我是写代码的篮球球痴,看到朱老师一篇抉择影响人生走向的文章,文中的我是作者本人。---我2009年初开始工作,2010年离开苏州来到深圳,那时候深圳的房价其实还不高,至少在全国来说深圳的房价还远没有现…

strcat()

把源字符串 连接 到目的字符串的后面。目的字符串的长度要足够长 char *strcat(char *dest, const char *src) {assert((NULL ! dest) && (NULL ! src));char *cp dest;while (*cp ! \0){cp;}while ((*cp *src) ! \0){;}return dest; }

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

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

MCU为什么内部不集成晶振

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

[JSOI2007]建筑抢修 (贪心)

题目链接 Solution 可以考虑 \(dp\) ,但是很显然 \((n^2)\) 降不下来. 然后考虑贪心,首先,绝对的正确的是,在同等的情况下,给后面的留更多的时间. 首先按照 \(T_2\) 排序. 然后我们维护一个大根堆 每修理一栋建筑 我们就把这栋建筑的T1值加入堆 若当前无法修理 我们判断堆顶是否…

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

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

strcmp()

比较2个字符串,返回2个字符串的差值 int strcmp(const char *str1, const char *str2) {assert((NULL ! str1) && (NULL ! str2));while(*str1 && *str2 && (*str1 *str2)){str1;str2;}return (*str1 - *str2); }

元旦加班

因为项目紧张,元旦加班了,这是在腾讯的第二次节假日加班。相对于害怕加班,我也害怕一段时间一段时间的浪费光阴一事无成,更害怕一段时间,一段时间加班后也是一事无成。加班有时候也挺舒服的,为了给乌托邦的…

MySQL中修改表结构的关键字_下列SQL语句中,修改表结构的关键字是

【单选题】对《将进酒》全诗分析不正确的是【单选题】下列划线词语的解释有误的一项是【多选题】下列食品属于不完全蛋白质的是 ( ) 。【单选题】下列聚合函数中属性列必须是数值型的是【单选题】( )体现了商品生产者之间相互交换的劳动关系。【单选题】在SELECT语句中使用SUM(…

strncpy()

char *strncpy(char *dest, const char *src, unsigned int count) {assert((NULL ! dest) && (NULL ! dsrc));char *ret dest;if (0 count){return dest;}while (count-- > 0){if (!(*ret *src)) //\0{return dest;}}*ret \0;//切记!!!!!return dest; }

远程用power shell 管理vmware view 池用户

1. 在客户端安装POWER SHELL V2.0的系统补丁,补丁号码为KB968930,里面包括了winrm和powershell 2.0 2. 将view connection server服务器设置为winrm的信任主机: PS C:\ set-item wsman:\localhost\Client\TrustedHosts -value IP为了能在计…

GitHub的嵌入式开源项目

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

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

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