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

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

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值