1、OTT概念

OTT 是 Object Type Translator 的缩写,对象类型转换器。它是用来将数据库中定义的类型(UDT)转换为C结构体类型的工具。
借助OTT 可以用C语言调用OCI来访问oracle的用户自定义类型(User-defined types)

2、大部分操作系统,都是通过命令行方式调用OTT。

OTT需要一个输入文件 intype ,它会生成一个outtype 文件和一个或者多个c语言头文件以及c文件。

首先看一下调用OTT命令的例子,先有一个整体印象:

ott userid=scott intype=demoin.typ outtype=demoout.typ code=c hfile=demo.h initfile=demov.c

3、准备数据

在数据库中我们首先创建一个自定义类型

CREATE TYPE emptype AS OBJECT
(
name VARCHAR2(30),
empno NUMBER,
deptno NUMBER,
hiredate DATE,
salary NUMBER
);

4、OTT命令详解

4.1 ott 表示ott程序名称

4.2 userid 表示连接数据库的用户名 后续会让输入这个对应的用户名的密码

4.3 intype 表示需要输入的文件名 该文件是由用户创建的

该文件内容需要告诉OTT 那个数据库类型需要被翻译,并且能控制翻译出的c语言对应的结构体名称
如果该参数没有给出,则翻译整个schema下的所有类型。
该文件示例如下:

CASE=LOWER
TYPE employee
  TRANSLATE SALARY$ AS salary
            DEPTNO AS department
TYPE ADDRESS
TYPE item
TYPE "Person"
TYPE PURCHASE_ORDER AS p_o

  1. 这里第一行 CASE 关键字,表示生成的c的标识符应该为小写,但是这个关键字只能控制结构体中的成员为小写,其中的结构体名称不变。
  2. 其他以TYPE 关键字开始的行,表示哪些对象应该被翻译。在上边这个例子中 employee ADDRESS item Person PURCHASE_ORDER 都将被翻译。
  3. 关键字 TRANSLATE ... AS 指明将被翻译的对象的成员名称在转换到c结构体的时候需要被转换,这里employee类型的SALARY$ 将被翻译为salary
  4. 关键字AS 表示将该对象名称翻译的时候替换 如PURCHASE_ORDER 将要被翻译为 p_o结构体类型
  5. 如果没有AS应用于对象或者属性,那么OTT将翻译成符合c标识符的对应的名称,其他不符合c标识符的都将被翻译成字符'_' 。
  6. OTT 会翻译指定对象所依赖的对象,虽然该对象并不在intype文件中明确指出。比如person 类型下边有一个address类型的属性,那么OTT在翻译person时会一并翻译address

4.4 outtype 表示类型输出文件

该文件由OTT自动生成。这个文件包含了哪些类型被翻译,包括其版本,头文件等信息。

4.5 code 表明翻译的目标语言,有如下几种

C equivalet to ANSI_C
ANSI_C for ANSI C
KR_C for Kernighan & Ritchie C

4.6 HFILE 指明翻译后的头文件的文件名称

4.7 INITFILE 指明翻译后的c文件的文件名称

5、OTT生成文件

OTT执行成功后,会生成3个文件,一个outtype文件,一个c头文件*.h,一个c文件*.c

5.1 outtype 文件

生成的这个文件包含了哪些类型被翻译,以及其详细信息,如下所示

5.2 头文件

比如翻译 employee 这个对象的结果如下

这里,name 被翻译成了 OCIString* 类型 empno 被翻译成了 OCINumber类型,等等。下表就是翻译对应的类型说明

这里除了各个属性被翻译外,还有NULL指示器也一应被翻译。
这里第一个指示器 _atomic 表示指示整个对象是否为空。

5.3 c文件

6、OCI应用使用OTT的步骤及方式

1)在数据库中定义用户类型
2)使用OTT生成头文件和c文件
3)编写OCI应用并调用INITFUNC 函数
4)添加OTT生成的头文件到OCI应用中
5)编译程序(程序本身和OTT生成的C文件以及OCI库)
6)执行程序
如下图所示

参考文档 http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci15ott.htm#g455369

7、实际操作

7.1 在数据库中定义的类型如下

7.2 创建文件 addr_type.typ 并执行ott命令

如上图,执行成功后生成了三个新文件,头文件如下所示

c文件

outtype 文件

参考文档 http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci15ott.htm#g455369

oracle OTT 学习的更多相关文章

  1. Asp.Net MVC4 + Oracle + EasyUI 学习 序章

    Asp.Net MVC4 + Oracle + EasyUI  序章 -- 新建微软实例 本文链接:http://www.cnblogs.com/likeli/p/4233387.html 1.  简 ...

  2. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  3. Oracle GoldenGate学习之Goldengate介绍

    Oracle GoldenGate学习之Goldengate介绍 (2012-10-02 17:07:27) 标签: 检查点 数据传输 队列 进程 分类: Goldengate Goldengate介 ...

  4. oracle 12c 学习系列(1)–12c初体验

    详见原文博客链接地址: oracle 12c 学习系列(1)–12c初体验

  5. Oracle RAC学习笔记01-集群理论

    Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...

  6. Oracle RAC学习笔记02-RAC维护工具集

    Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...

  7. [Oracle]OWI学习笔记--001

    [Oracle]OWI学习笔记--001 在 OWI 的概念里面,最为重要的是 等待事件 和 等待时间. 等待事件发生时,需要通过 P1,P2,P3 查看具体的资源. 可以通过 v$session_w ...

  8. 推荐一个Oracle数据库学习网站

    推荐一个我个人的Oracle数据库学习网站,比较系统性的整理,会持续更新的网站.网址: Oracle基础教程: http://www.oraclejsq.com/article/010100110.h ...

  9. Oracle RMAN 学习:恢复

    Oracle RMAN 学习:恢复 6 rman恢复 Rman中的恢复对应restore,recover Restore,数据修复,利用备份集的数据文件来替换已损坏的数据文件或将其恢复到另外一个位置, ...

随机推荐

  1. 洛谷P2766 最长不下降子序列问题(最大流)

    传送门 第一问直接$dp$解决,求出$len$ 然后用$f[i]$表示以$i$为结尾的最长不下降子序列长度,把每一个点拆成$A_i,B_i$两个点,然后从$A_i$向$B_i$连容量为$1$的边 然后 ...

  2. Java FileInputStream与FileReader的区别

    在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...

  3. 简单的IDEA破解到2099年

    原文链接:https://www.cnblogs.com/duende99/p/10038640.html 破解方式有2种,第一种比较方便 第一种比较方便1.使用注册码破解:http://idea.l ...

  4. 【Jquery】jquery刷新页面(局部及全页面刷新)

    下面介绍全页面刷新方法:有时候可能会用到window.location.reload()刷新当前页面.parent.location.reload()刷新父亲对象(用于框架)opener.locati ...

  5. jeesite 的提示消息图标

    jeesite  的提示消息图标 jeesite 框架的提示信息 保存数据时 总是显示一个叉子图标 不符合要求 原因: 不加成功两字:如下 后来大神说 保存数据提示语句必须加“”“成功” 才会出现正确 ...

  6. Navicat 连接Sqlite数据库的方法和步骤

    1.打开Navicat,进行如下操作. 2.在弹出的新建连接对话框中输入正确的信息,点击“确定”按钮. 3.可见如下

  7. tornado 03 请求与响应

    tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...

  8. mysql id_logfile 日志

    ib_logfile 文件原理 ib_logfile0 是innodb中事务日志,记录系统的回滚,重做日志,记录的是文件的物理更改,存放位置my.ini 中的 datadir="D:\php ...

  9. apache 2.4 访问权限配置

    在apache 2.4里,访问权限配置与2.2不同,如果设置不对,则会报403错误,日志中会报 AH01630: client denied by server configuration.   [S ...

  10. 深入剖析PHP输入流 php://input

    另附一个一个连接: http://www.nowamagic.net/academy/detail/12220520 ///////////////////////////////////////// ...