c oracle udt,Oracle OCI操作UDT相关学习

1、Oracle数据类型

Oracle的数据类型如下

字符串类型 char nchar varchar2 nvarchar2

数值类型 int number integer smallint

日期类型 date timestamp

自定义类型 create type

这里UDT表示的就是oracle自定义类型,语法如下

CREATE TYPE xxx as object (字段1 类型1, 字段2 类型2, ...);

如下创建了一个自定义类型 addr_type

f_0a644ef67bf417f730d605f3b1f32508.png

该类型可以应用到表的某个列,创建了一个 cust  表

f_9c0aedd017867cd938add330e27866a5.png

这个表中有两个字段,一个基本类型的id字段,一个为ADDR_TYPE类型的addr字段。

2、SQL相关

插入数据SQL

f_68c711ab910a10578ca8e230ecd491e8.png

执行查询操作:

select * from cust;

f_a580ec2444876c3d045afc3ca70723b5.png

这里ADDR的值,需要点击sqldeveloper 的对应列表,才能看到其值。

f_409ac02e1a1e699883540c77379e7018.png

3、OCI相关

3.1 select 相关

在使用OCI操作自定义类型之前,需要通过OTT工具来对类型进行转换,并将生成的头文件和c文件加入到OCI的源码工程中,具体OTT相关操作请参考 Oracle OTT 学习 一文。

f_4e3e80699f54fa879b63a35438963f0c.png

1)进行OCI环境变量的初始化并分配各个句柄,这里对这些操作进行了封装,其中调用OCIEnvCreate 函数的参数mode 必须有 OCI_OBJECT 模式来支持自定义类型。

2)调用OTT生成的C函数进行初始化

3)连接数据库,这里也对其进行了封装

4)准备sql语句

备注:这里addr_type* at 声明的at变量是由OTT自动生成的。 在声明时最好赋空值,如addr_type* at = NULL;

f_2085feea533f9044895ea993737dff56.png

f_4043ddc85680a51ad128bab7984e8f8f.png

5)绑定输出变量 id

6)绑定输出变量 addr 这里绑定自定义变量需要两步(或者理解为3步)

6.1 先用SQLT_NTY参数调用 OCIDefineByPos

6.2 然后调用OCIDefineObject 来绑定at 变量,这个at变量是一个结构体,上边有介绍。

绑定完成后,即可execute并fetch出结果。

f_88f9b8b1ddadb956669d297b4e009a49.png

7)调用OCIStmtExecute 执行语句

8)循环调用OCIStmtFetch 来获取数据

执行程序结果如下:

f_530e4f30e8ded5e00bc83bf7ba1f8714.png

3.2 insert 操作

3.2.1 用OTT生成的结构体来操作

f_c62ebda7437d0f1f36702545f9b8d218.png

1)初始化OCI环境及句柄

2)对结构体addr内容进行赋值

3)连接数据库

f_12f0a0acf592b6bc8527df6d1ceb8ac6.png

4)准备sql语句,这里采用绑定的方式

5)对自定义类型进行绑定同select 中的方式。

f_a2db453d90c8c44c56cb0cd2c61a015d.png

6)执行sql语句,并进行相关句柄回收等操作。

备注:在前边给结构体中的变量赋值之前,必须对其进行初始化为0,否则程序报错。

这里重点是 自定义类型整体作为绑定变量来进行操作。

3.2.2 采用常规方式

f_aebd89e8f13884dcb1afe398af60d453.png

1)声明变量,并初始化OCI环境及句柄

2)连接数据库

f_52cb9d1eccc240e26fd941a06efff6a8.png3)绑定变量,这里分别绑定各自变量,相当于把自定义类型拆开了。

4)执行sql 并最后释放句柄相关。

备注:这里采用了 ADDR_TYPE(:2,:3,:4,:5) 这种方式来实现。

原文:http://www.cnblogs.com/dspeeding/p/6490185.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值