OCI编程
OCI编码步骤: 、定义OCI数据结构
、连接到Oracle数据库:使用orlon函数调用还可以并发连接多个数据库。
、打开光标。通过调用oopen来打开一个光标。
、分析语句.使用oparse来分析语句,使语句和定义的一个光标联系。如果oparse的defflg参数为0的话,则数据定义语句在语句分析时执行;如果defflg为非0时,就必须调用oexn或oexec执行该语句,所有的数据操作语句和查询语句都需要进一步的处理。
、结合输入变量的地址。
有三个OCI调用来将地址结合到虚拟变量中:obndrv、obndrn、obndra。
使用obndrv时,必须指出虚拟变量的名字。如":num",名字不能是保留字。
使用obndrn时,每一个虚拟变量的形式必须为:N,N是1-255之间的值。如SELECT demp,sor FROM table
WHERE sor >: and sor<:。obndrn不能和PL/SQL块一起使用。
obndra用于把程序中的标量或数组的地址结合到SQL语句或PL/SQL块中的变量。
、描述选择表项。
使用odescr来完成这个操作。
、定义选择表项。
使用odefin来完成这个操作。
、执行语句。
a、使用oexec来反复执行语句。
b、oexn来执行单个语句输入许多值。
、提取查询行。
oexfet 必须确保选择表项定义的输出变量是数组。
ofen 必须确保选择表项定义的输出变量是数组。
ofetch
、关闭光标。
用oclose来关闭光标。
、断开和数据库的连接。
使用ologof来断开和数据库的连接。 调用OCI函数的几点说明: 数据结构: def_lda lda;
def_cda cda; 参数:
整型 (sword、sb4、ub4)
短整型 (sb2、ub2)
程序使用的变量 oparse(struct cda_def * cursor,text *sqlstmt,sb4 sqllen,sword defflg,ub4 lngflg);
调用格式如下:
oparse(&cda,(text *)sqlstmt,(sb4) -,(sword) ,(ub4) ); OCI程序和Oracle数据库的连接: ()连接数据库
orlon(struct lda_def * lda,ubl *hba,text *uid,[sword uid1],[text *pswd],[sword pswd1],<sword audit>);
lda: 指向LDA指针
hda: 指向256字节的属主数据区
uid: 是指向字符串的指针,该串包含一个用户名、可选择的密码和可选择的属主机标识符,应把密码直接放在用户名之后,中间用"/"隔开。宿主机标识符放在用户名和密码的后面,用"@"字符分割。
uid1: 是uid所指向的串的长度,如果该串是以null结束,则参数是-。
pswd: 是指向包含口令的指针,如果口令是uid所指向的一部分,则该参数是0。
pswd1: 是口令的长度,如果pswd所指向的串是null或以null结束,则该参数是-。
audit: 该参数不再使用,是允许是0或-。 例子:
/*OCI与ORACLE进行连接*/ #include <stdlib.>;
#include <ocidfn.h>;
/*建立登录数据区*/
lda_def lda;
/*建立宿主数据区*/
ub1 had[];
/*建立光标数据区*/
cda_def cda;
/*初始化数据库名和口令*/
text *uid="dbtest/dbtest";
/*定义一个串变量sql语句,并用PL/SQL块来初始化它*/
char sql_statament[]="select * from emp;";
/*连接数据库*/
if (orlon(&lda,&had,uid,-,(text*),-,))
{ /*连接失败*/
error_handler(&lda);
exit(EXIT_FAILURE);
}
/*打开光标*/
if (oopen(&lda,&cda,,,,,))
{ /*打开光标失败 */
printf("Cannot open cursor, exiting......\n");
exit();
} ()打开光标
oopen(struct cda_def *cursor,struct lda_def * lda,<text *dbn>,<sword dbnl>,<sword arsize>,<text *uid>,<sword uid1>);
cursor: 指向程序内CDA的指针。
lda: 是指向LDA的指针,该LDA是orlon调用所指向的那个LDA。
dbn: 此参数是为ORACLE版本2兼容设置的,在比他高的版本中,应指定为0;
dbn1: 此参数是为ORACLE版本2兼容设置的,在比他高的版本中,应指定为-;
arsize: 该参数在ORACLE中不再使用.
uid: 是指向字符串的指针,该串包括用户标识和口令。
uid1: 是uid所指串的长度,如果该串是null结束,则该参数可省略。 ()分析SQL语句。
oparse(struct cda_def *cursor,text * sqlstmt,[sb4 sqll,sword defflg,ub4 lngflg]);
cursor: 是指向CDA的指针,该CDA是在oopen调用中所指向的那个CDA。
sqlstmt: 是指向包含SQL语句串的指针。
sqll: 指出SQL语句的长度,如果由sqlstmt所指向的SQL语句串是null结束,则该参数可省略。
defflg: 如果是非0,且该应用以延迟的方式被连接,则SQL语句被
延期,直至desc、odescr、oexec,oexn或oexfet调用被执行。
lngflg:决定ORACLE如果处理SQL语句或PL/SQL无名块。
OCI编程的更多相关文章
- VS2010下配置OCI编程
OCI是Oracle官方出品的用于C/C++语言连接.操作Oracle数据库的API.在windows操作系统下使用VS等IDE编写.编译C++程序十分方便.简单,不需要使用Makefile.使用OC ...
- OCI 编程
一.环境的配置 1.系统环境:要想使用OCI编程需要安装Oracle的客户端,而这个普通的客户端比较大,方便起见,可以安装即时客户端(Instantclient)作为Oracle的访问客户端. 具体 ...
- 学习OCI编程
转自:http://kulong0105.blog.163.com/blog/static/174406191201162145944574/ 最近公司做的一个项目,要处理海量数据,数据是存放在Ora ...
- [Oracle] Bulk Insert Data
命名空间:Oracle.DataAccess.Client 组件:Oracle.DataAccess.dll(2.112.1.0) ODP.NET 版本:ODP.NET for .NET Framew ...
- Bulk Insert Data
Bulk Insert Data 命名空间:Oracle.DataAccess.Client 组件:Oracle.DataAccess.dll(2.112.1.0) ODP.NET 版本:ODP.NE ...
- Oracle学习的一些建议(转)
核心提示:学习Oracle是一个漫长艰辛的过程.如果没有兴趣,只是被迫学习,那么是很难学好的.学习到一定程度的时候,要想进一步提高,就不得不接触很多Oracle之外的东西 学习Oracle是一个漫长艰 ...
- C++使用ocilib访问oracle数据库
引用: http://blog.csdn.net/u011311985/article/details/51221898 测试程序我放到 http://download.csdn.NET/detail ...
- [转帖]Oracle数据库lob大对象数据类型字段总结,值得收藏
Oracle数据库lob大对象数据类型字段总结,值得收藏 原创 波波说运维 2019-07-11 00:02:00 https://www.toutiao.com/i67108943269703357 ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
随机推荐
- Swift 开源 Linux Ubuntu Install
Swift 开源了,它现在变成跨平台的了,开源后的 Swift 不止能运行在 MAC 和 iOS 平台,现在也可以运行在 Linux 平台了.swift.org 网站上面提供了在 Linux 上面安装 ...
- scp -P 非22端口拷贝
scp 远程拷贝非22端口的服务器文件的方法:上传文件到服务器scp -P 29966 /Users/ianMac/Desktop/progit.zh.pdf root@远程ssh服务器的ip:/ho ...
- Win10:如何修改双网卡的优先级?
很多使用双网卡的IT之家网友可能遇到一种情况,比如笔记本电脑在插上网线后还是用WiFi,得手动关闭无线连接才能转换到有线连接.如何才能调整合适的网络优先级呢?一般来说,有两种方法比较常用. 一.调整网 ...
- Scrapy爬虫入门系列4抓取豆瓣Top250电影数据
豆瓣有些电影页面需要登录才能查看. 目录 [隐藏] 1 创建工程 2 定义Item 3 编写爬虫(Spider) 4 存储数据 5 配置文件 6 艺搜参考 创建工程 scrapy startproj ...
- <head> 或 <body> 中的 JavaScript
您可以在 HTML 文档中放入不限数量的脚本. 脚本可位于 HTML 的 <body> 或 <head> 部分中,或者同时存在于两个部分中. 通常的做法是把函数放入 <h ...
- java string 首字母大小写方法
String字符串需要进行首字母大小写改写,查询google,就是将首字母截取,转化大小写 + 首字母后面字符串 //首字母小写 public static String captureName(St ...
- 解决ios8 webView加载的地图无法定位问题
本文转载至http://www.cocoachina.com/bbs/read.php?tid-237825.html 1.在文件info.pilist 中导入 NSLocationWhenI ...
- 《从零开始学Swift》学习笔记(Day 18)——有几个分支语句?
原创文章,欢迎转载.转载请注明:关东升的博客 分支语句又称条件语句,Swift编程语言提供了if.switch和guard三种分支语句. if语句 由if语句引导的选择结构有if结构.if ...
- SVN中分支的建立与合并
转载 出处:http://yaozhong1988.blog.163.com/blog/static/141737885201162671635126/ 一. SVN分支的意义: 简单 ...
- NoSQL 数据库分类 颠覆
NoSQL 数据库分类 类型 部分代表特点 列存储 HbaseCassandraHypertable顾名思义,是按列存储数据的.最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或 ...