您的位置:首页 > 博客中心 > 数据库 >

Oracle OCI操作UDT相关学习

时间:2022-03-06 01:02

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

技术分享

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

技术分享

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

2、SQL相关

插入数据SQL

技术分享

执行查询操作:

select * from cust;

技术分享

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

技术分享

3、OCI相关

3.1 select 相关

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

技术分享

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

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

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

4)准备sql语句  

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

技术分享

技术分享

5)绑定输出变量 id

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

6.1 先用SQLT_NTY参数调用 OCIDefineByPos 

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

 

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

技术分享

7)调用OCIStmtExecute 执行语句

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

 

执行程序结果如下:

技术分享

3.2 insert 操作

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

技术分享

1)初始化OCI环境及句柄

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

3)连接数据库

技术分享

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

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

技术分享

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

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

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

3.2.2 采用常规方式

技术分享

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

2)连接数据库

技术分享3)绑定变量,这里分别绑定各自变量,相当于把自定义类型拆开了。

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

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

本类排行

今日推荐

热门手游