您的位置:首页 > 数据库 > Oracle

ORACLE调用接口(OCI)中对象类型转化器(OTT)的使用

2012-04-03 21:26 609 查看
OTT是OCI中访问对象类型数据的一个非常重要的工具,它将数据库中的对象类型或几何对象映射为C语言中的结构体,供OCI程序使用。在所有的支持oracle的操作系统中,OTT工具是以命令行方式工作的。要使用它,我们必须先做一些准备工作。
设置ORACLE_HOME环境变量,我的是C:\app\zxg\product\11.1.0\db_1。
在windows命令行方式下,输入ott,出现下列信息,




OTT使用方法实例:首先,在scott用户下建立类型
CREATE TYPE emp_t AS OBJECT
( name VARCHAR2(30),
empno NUMBER,
deptno NUMBER,
hiredate DATE,
salary NUMBER);

我在本机上是在D盘根目录运行这个程序,在D盘根目录中,创建文件demoin.tpy,在文件里面写入
CASE=LOWER
TYPE emp_t
并保存。输入OTT命令,
D:\>ott userid=scott/tiger intype=demoin.tpy outtype=demoout.tpy code=c hfile=demo.h initfile=demov.c
具体说明是:使用用户名scott和密码tiger连接数据库,将输入文件demoin.tpy中的类型定义转换成C语言中的结构体声明。输出到头文件demo.h(C语言中结构体定义)和demoout.tpy。实现文件demov.c包含了一些用户定义类型转换和初始化的函数信息。

执行这个命令后,由OTT产生的类型输出文件demoout.tpy的内容如下:
CASE = LOWER
INITFILE = demov.c
INITFUNC = demov

TYPE SCOTT.EMP_T AS emp_t
VERSION = "$8.0"
HFILE = demo.h

由OTT产生的头文件demo.h的内容如下:
#ifndef DEMO_ORACLE
# define DEMO_ORACLE

#ifndef OCI_ORACLE
# include <oci.h>
#endif

typedef OCIRef emp_t_ref;

struct emp_t
{
OCIString * name;
OCINumber empno;
OCINumber deptno;
OCIDate hiredate;
OCINumber salary;
};
typedef struct emp_t emp_t;

struct emp_t_ind
{
OCIInd _atomic;
OCIInd name;
OCIInd empno;
OCIInd deptno;
OCIInd hiredate;
OCIInd salary;
};
typedef struct emp_t_ind emp_t_ind;

#endif

由OTT产生的实现文件demov.c如下:

#ifndef OCI_ORACLE
# include <oci.h>
#endif

sword demov(OCIEnv *env, OCIError *err)
{
sword status = OCITypeVTInit(env, err);
if (status == OCI_SUCCESS)
status = OCITypeVTInsert(env, err,
(unsigned char *) "SCOTT", 5,
(unsigned char *) "EMP_T", 5,
(unsigned char *) "$8.0", 4);
return status;
}

一旦OTT完成类型转换,则会针对intype文件中的每一个对象类型,头文件中就包含有对应类型结构体定义,还有一个结构体表示该类型的空指示符。例如,在头文件中,结构体emp_t就表示对象类型emp_t,还有一个对应的指示符结构体emp_t_ind。

这个只是针对C语言的,如果要转换为C++的源文件,那么就必须输入类似于下面的命令:
ott userid=scott/tiger intype=demoin.tpy outtype=demoout.tpy code=cpp hfile=

sdogeometry.h cppfile=sdogeometry.cpp
输入正确后,得到了下面的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐