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相关学习的更多相关文章

  1. Oracle OCI操作UDT相关学习(二)

    沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表. 1.更改数据 在sqldeveloper 中更新数据, update dxl.cust set addr.street='a11' ...

  2. oracle 中proc和oci操作对缓存不同处理

    oracle 中proc和oci操作对缓存不同处理

  3. Oracle 参数文件及相关操作介绍

    Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...

  4. [转]Oracle 树操作(select…start with…connect by…prior)

    转自http://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html Oracle 树操作(select-start with-conne ...

  5. 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具

    基于OCILIB的oracle数据库操作总结 1.       类图 2.       基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...

  6. oracle 10g操作和维护手册

    1.    检查数据库基本状况... 1.1.     检查Oracle实例状态... 1.2.     检查Oracle服务进程... 1.3.     检查Oracle监听状态... 2.    ...

  7. Oracle 树操作

    Oracle 树操作(select…start with…connect by…prior) oracle树查询的最重要的就是select…start with…connect by…prior语法了 ...

  8. DocX开源WORD操作组件的学习系列四

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  9. Windows7上完全卸载Oracle 12c操作步骤

    注:本文来源于:< Windows7上完全卸载Oracle  12c操作步骤 > 1.关闭Oracle所有的服务,按[win+R]运行[services.msc]找到所有Oracle开头的 ...

随机推荐

  1. Notepad++给自己打造一款PowerQuery M语言编辑器【转】

    Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器 Excel 使用Notepad++给自己打造一款PowerQuery M语言编辑器-Power BI-ExcelHo ...

  2. kvm虚拟机磁盘文件读取小结

    kvm虚拟机磁盘挂载还真不是一帆风顺的.xen虚拟化默认就raw格式的磁盘,可以直接挂载,kvm如果采用raw也可以直接挂载,与xen磁盘挂载方式一致. 1.kvm虚拟化相比xen虚拟化来说,工具与方 ...

  3. “全栈2019”Java第四十三章:封装

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. struts2官方 中文教程 系列二:Hello World项目

    先贴个本帖的地址,免得其它网站被爬去了struts2入门系列二之Hello World  即 http://www.cnblogs.com/linghaoxinpian/p/6898779.html ...

  5. PTA 7-2 深入虎穴 (30 分)

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  6. iOS核心动画之蒙版

    应用场景 想让一些古卷文字慢慢渐变成背景色,而不是一个突兀的边界 layer的边框不是圆角,而是有星形框架的图片 方法 设置mask属性.这个属性也是一个layer属性,但只有alpha属性有效果.即 ...

  7. C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★

    构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用——简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...

  8. 3期浅析宽字节注入-----SQL注入

    通过分类的名称,你就可以找到漏洞银行的hack show视频. 吸收这个知识的几个关键的信息. 1.通过视频得到知识源.         [信息来源] 我怎么从不清楚到知道这个信息来源?这个过程没办法 ...

  9. python 全栈开发:python基础

    python具有优美.清晰.简单,是一个优秀并广泛使用的语言.诞生于1991年2.python历史 1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器.Python这个名字,来自 ...

  10. mybatis的入门(二)

    上篇文章首先介绍了JDBC操作数据库的相关知识,并总结了JDBC操作数据存在的一些问题,那么这篇文章我们来介绍下mybatis的相关内容 一.mybatis的架构图 下面对上面的架构图详细说明下: 1 ...