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. Java设计模式之单例设计模式 入门实例

    一.基础概念 (1).单例设计模式:保证一个类在内存中的对象唯一性. (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作.一个程序要基于另一个程序操作后的结果进行操 ...

  2. CSS探案之 background背景属性剖析

    首先,我们先来看看两个css属性:background和background-color,对!就是这两位,相信大家在平时应该没少 麻烦人家把,反正我是这样,几乎也少会用到背景图,原因很简单:就是有点害 ...

  3. [BJOI2012]连连看 BZOJ2661 费用流

    题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...

  4. JS 节点的属性 与 元素

    节点的属性{     nodeType 是节点的类型:     nodeNam 是节点的名字     nodeValue 节点的值 }可以用节点.属性 取得三个属性的值 节点.nodeType 出来的 ...

  5. ssh 远程登录TX2

    TX2 端SSH操作 安装: sudo apt-get install openssh-server 确认sshserver是否启动: ps -e |grep ssh 如果看到sshd那说明ssh-s ...

  6. SDK 开发 .a .framework .bundle (xcode引用) 依赖sdk工程

    一. 静态库.a 1.创建静态库工程 Cocoa Touch Static Libray  ,然后可以创建一个测试视图 TestView 2.暴露头文件 -> Build Phases--> ...

  7. springboot整合activemq加入会签,自动重发机制,持久化

    消费者客户端成功接收一条消息的标志是:这条消息被签收. 消费者客户端成功接收一条消息一般包括三个阶段:          1.消费者接收消息,也即从MessageConsumer的receive方法返 ...

  8. 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)

    题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...

  9. LOJ6503. 「雅礼集训 2018 Day4」Magic(容斥原理+NTT)

    题目链接 https://loj.ac/problem/6503 题解 题中要求本质不同的序列数量,不太好搞.我们考虑给相同颜色的牌加上编号,这样所有牌都不相同.那么如果我们求出了答案,只需要将答案除 ...

  10. UESTC - 1610 递推方程+矩阵快速幂

    感觉像是HDU Keyboard的加强版,先推出3张牌时的所有组合,然后递推出n张牌 看到n=1e18时吓尿了 最后24那里还是推错了.. (5行1列 dp[1][n],dp[2][n],dp[3][ ...