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

OTT是OCI中访问对象类型数据的一个非常重要的工具,它将数据库中的对象类型或几何对象映射为C语言中的结构体,供OCI程序使用。在所有的支持oracle的操作系统中,OTT工具是以命令行方式工作的。要使用它,我们必须先做一些准备工作。

设置ORACLE_HOME环境变量,我的是C:\app\zxg\product\11.1.0\db_1。

在windows命令行方式下,输入ott,出现下列信息,

0818b9ca8b590ca3270a3433284dd417.png

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

#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

#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

输入正确后,得到了下面的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值