OCI编程

OCI编码步骤:

1、定义OCI数据结构
2、连接到Oracle数据库:使用orlon函数调用还可以并发连接多个数据库。
3、打开光标。通过调用oopen来打开一个光标。
4、分析语句.使用oparse来分析语句,使语句和定义的一个光标联系。如果oparse的defflg参数为0的话,则数据定义语句在语句分析时执行;如果defflg为非0时,就必须调用oexn或oexec执行该语句,所有的数据操作语句和查询语句都需要进一步的处理。
5、结合输入变量的地址。
   有三个OCI调用来将地址结合到虚拟变量中:obndrv、obndrn、obndra。
   使用obndrv时,必须指出虚拟变量的名字。如":num",名字不能是保留字。
   使用obndrn时,每一个虚拟变量的形式必须为:N,N是1-255之间的值。如SELECT demp,sor FROM table
WHERE sor >:1 and sor<:2。obndrn不能和PL/SQL块一起使用。
   obndra用于把程序中的标量或数组的地址结合到SQL语句或PL/SQL块中的变量。
6、描述选择表项。
   使用odescr来完成这个操作。
7、定义选择表项。
   使用odefin来完成这个操作。
8、执行语句。
   a、使用oexec来反复执行语句。
   b、oexn来执行单个语句输入许多值。
9、提取查询行。
   oexfet  必须确保选择表项定义的输出变量是数组。
   ofen    必须确保选择表项定义的输出变量是数组。
   ofetch
10、关闭光标。
    用oclose来关闭光标。
11、断开和数据库的连接。
   使用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) -1,(sword) 1,(ub4) 2);

OCI程序和Oracle数据库的连接:

(1)连接数据库
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结束,则参数是-1。
pswd: 是指向包含口令的指针,如果口令是uid所指向的一部分,则该参数是0。
pswd1: 是口令的长度,如果pswd所指向的串是null或以null结束,则该参数是-1。
audit: 该参数不再使用,是允许是0或-1。

例子:
/*OCI与ORACLE进行连接*/

#include <stdlib.>;
#include <ocidfn.h>;
/*建立登录数据区*/
lda_def lda;
/*建立宿主数据区*/
ub1 had[256];
/*建立光标数据区*/
cda_def cda;
/*初始化数据库名和口令*/
text *uid="dbtest/dbtest";
/*定义一个串变量sql语句,并用PL/SQL块来初始化它*/
char sql_statament[]="select * from emp;";
/*连接数据库*/
if (orlon(&lda,&had,uid,-1,(text*)0,-1,0))
{   /*连接失败*/
error_handler(&lda);
exit(EXIT_FAILURE);
}
/*打开光标*/
if (oopen(&lda,&cda,0,0,0,0,0))
{  /*打开光标失败 */
   printf("Cannot open cursor, exiting......\n");
   exit(1);
}

(2)打开光标
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兼容设置的,在比他高的版本中,应指定为-1;
arsize: 该参数在ORACLE中不再使用.
uid: 是指向字符串的指针,该串包括用户标识和口令。
uid1: 是uid所指串的长度,如果该串是null结束,则该参数可省略。

(3)分析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无名块。
时间: 2024-08-09 14:42:38

OCI编程的相关文章

OCI 编程

一.环境的配置 1.系统环境:要想使用OCI编程需要安装Oracle的客户端,而这个普通的客户端比较大,方便起见,可以安装即时客户端(Instantclient)作为Oracle的访问客户端. 具体的配置可以参考这里: http://www.cnblogs.com/ychellboy/archive/2010/04/16/1713884.html 2.执行环境: windows下的配置可以参考这里: http://blog.csdn.net/sherlockhua/article/details

OCI编程历程

本文转载自:http://www.cnblogs.com/ychellboy/archive/2010/04/16/1713884.html 一.问题 为什么要使用OCI?可以使用ODBC对oracle数据库进行连接啊.当然这在widows系统上一点问题都没有,但如果程序需要跨多个不同的平台使用ODBC就有一定的问题.不是还有unixODBC和iODBC吗?……在unix平台上使用MS推出的东西进行开发还是让我这种转牛角尖的菜鸟程序员难以接受. 实习时所在的部门一直使用OCI来访问oracle数

VS2010下配置OCI编程

OCI是Oracle官方出品的用于C/C++语言连接.操作Oracle数据库的API.在windows操作系统下使用VS等IDE编写.编译C++程序十分方便.简单,不需要使用Makefile.使用OCI也只需要简单的配置一下就可以使用用oci.h头文件了. 首先,你必须安装Oracle.安装完成后,在它的安装目录下找到OCI文件夹,OCI文件夹下面有两个文件夹:include和lib.打开VS2010,选择你要使用OCI编程的项目邮件,选择属性,选择配置属性下的VC++目录,在包含目录里添加上述

极简OCI连接TimesTen程序

针对Oracle数据库的开发,Java和OCI是最常用的两种编程语言,对于TimesTen也是一样. 相较于Pro*C,OCI编程稍显复杂.但OCI提供更细粒度的控制,提供更丰富的功能和更好的性能.因此,对于熟悉C语言的编程人员,为性能和可控制性,以及易于调试,都应该首选OCI而非Pro*C. 和Pro*C一样, OCI也支持用TNS和easy connect string(DSN)来连接TimesTen. 可以通过connect string和TWO_TASK来指定相应的接口. 由于大部分的概

数据库编程总结

当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等.数据库编程是对数据库的创建.读写等一列的操作.数据库编程分为数据库客户端编程与数据库服务器端编程.数据库客户端编程主要使用ODBC API.ADO.ADO.NET.OCI.OTL等方法:数据库服务端编程主要使用OLE D

oracle lob 简单介绍

何为LOB? lob为oracle数据库的一个大对象数据类型,可以存储超过4000bytes的字符串,二进制数据,OS文件等大对象信息.最大可存储的容量根oracle的版本和oracle 块大小有关. 有那几种可供选择的LOB类型? 目前ORACLE提供了CLOB,NCLOB,BLOB,BFILE共四种LOB类型,CLOB,NLOB为大字符串类型,NLOB为多语言集字符类型,类似于NVARCHAR类型,用他们代替以前的LONG类型;BLOG为大二进制类型,用来代替以前的LONG RAW类型;BF

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

[转]Oracle_ProC编程

1.引言 由于PL/SQL不能用来开发面向普通用户的应用程序,必须借助其他语言或开发工具. 在Linux操作系统下应该用什么语言或开发工具来进行Oracle数据库应用的开发呢?本文将介绍2种方案:Pro*C.JDBC.而另一种SQLJ方法, 限于篇幅省略. 2. 环境设置 2.1 软件环境 本文的实验环境是在Red Hat Linux 9.0操作系统下,因为Oracle 9i要求至少512MB内存,所以我们选择Oracle 9iR2作为数据库环境.说明一 点:Oracle 9i的典型安装不包括P

JavaEE之JDBC编程[详解]

1.数据库简介 数据库(DB,Data Base ) 数据库管理系统(DBMS,Data Base Management System) 关系型数据库(RDB) 关系型数据库管理系统(RDBMS) SQL语言(Structured Query Language):使用关系模型的数据库语言,用于和各类数据库的交互,提供通用的数据管理和查询功能. 常用SQL指令:(CURD) SELECT .INSERT.DELETE.UPDATE.CREATE.DROP ODBC(Open DataBase Co