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

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

这个表中有两个字段,一个基本类型的id字段,一个为ADDR_TYPE类型的addr字段。
2、SQL相关
插入数据SQL

执行查询操作:
select * from cust;

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

3、OCI相关
3.1 select 相关
在使用OCI操作自定义类型之前,需要通过OTT工具来对类型进行转换,并将生成的头文件和c文件加入到OCI的源码工程中,具体OTT相关操作请参考 Oracle 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) 这种方式来实现。
Oracle OCI操作UDT相关学习的更多相关文章
- Oracle OCI操作UDT相关学习(二)
沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表. 1.更改数据 在sqldeveloper 中更新数据, update dxl.cust set addr.street='a11' ...
- oracle 中proc和oci操作对缓存不同处理
oracle 中proc和oci操作对缓存不同处理
- Oracle 参数文件及相关操作介绍
Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...
- [转]Oracle 树操作(select…start with…connect by…prior)
转自http://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html Oracle 树操作(select-start with-conne ...
- 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具
基于OCILIB的oracle数据库操作总结 1. 类图 2. 基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...
- oracle 10g操作和维护手册
1. 检查数据库基本状况... 1.1. 检查Oracle实例状态... 1.2. 检查Oracle服务进程... 1.3. 检查Oracle监听状态... 2. ...
- Oracle 树操作
Oracle 树操作(select…start with…connect by…prior) oracle树查询的最重要的就是select…start with…connect by…prior语法了 ...
- DocX开源WORD操作组件的学习系列四
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- Windows7上完全卸载Oracle 12c操作步骤
注:本文来源于:< Windows7上完全卸载Oracle 12c操作步骤 > 1.关闭Oracle所有的服务,按[win+R]运行[services.msc]找到所有Oracle开头的 ...
随机推荐
- Notepad++给自己打造一款PowerQuery M语言编辑器【转】
Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器 Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器-Power BI-ExcelHo ...
- kvm虚拟机磁盘文件读取小结
kvm虚拟机磁盘挂载还真不是一帆风顺的.xen虚拟化默认就raw格式的磁盘,可以直接挂载,kvm如果采用raw也可以直接挂载,与xen磁盘挂载方式一致. 1.kvm虚拟化相比xen虚拟化来说,工具与方 ...
- “全栈2019”Java第四十三章:封装
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- struts2官方 中文教程 系列二:Hello World项目
先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World 即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...
- PTA 7-2 深入虎穴 (30 分)
著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...
- iOS核心动画之蒙版
应用场景 想让一些古卷文字慢慢渐变成背景色,而不是一个突兀的边界 layer的边框不是圆角,而是有星形框架的图片 方法 设置mask属性.这个属性也是一个layer属性,但只有alpha属性有效果.即 ...
- C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★
构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用——简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...
- 3期浅析宽字节注入-----SQL注入
通过分类的名称,你就可以找到漏洞银行的hack show视频. 吸收这个知识的几个关键的信息. 1.通过视频得到知识源. [信息来源] 我怎么从不清楚到知道这个信息来源?这个过程没办法 ...
- python 全栈开发:python基础
python具有优美.清晰.简单,是一个优秀并广泛使用的语言.诞生于1991年2.python历史 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器.Python这个名字,来自 ...
- mybatis的入门(二)
上篇文章首先介绍了JDBC操作数据库的相关知识,并总结了JDBC操作数据存在的一些问题,那么这篇文章我们来介绍下mybatis的相关内容 一.mybatis的架构图 下面对上面的架构图详细说明下: 1 ...