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开头的 ...
随机推荐
- “全栈2019”Java第十四章:二进制、八进制、十六进制
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- AtCoder Grand Contest 031题解
题面 传送门 题解 比赛的之后做完\(AB\)就开始发呆了--简直菜的一笔啊-- \(A - Colorful\ Subsequence\) 如果第\(i\)个字母选,那么它前面任意一个别的字母的选择 ...
- 模拟实现STL库
最近在复习STL,感觉再看的时候比刚开始学的时候通透很多.以前模拟实现了一个STL库,最近复习完又重构了一遍.代码放出来以供后面学习.如果有写的不好的地方欢迎大家批评指正. STL_List.h #p ...
- php中使用PHPExcel读写excel(xls)文件的方法
首先从GitHub上下载 excel的相关类库 下载地址:https://github.com/PHPOffice/PHPExcel 以下是从excel中获取数据 <?php /** * * @ ...
- ios 相机 自定义 相片的截取
前段时间公司需要做一个身份识别的功能,而系统相机无法满足要求,so自己自定义了. 上代码: .h文件 #import <UIKit/UIKit.h> #import <AVFound ...
- Nginx+Apache动静分离
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术.动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项 针对PHP的动 ...
- npm淘宝镜像和默认镜像切换
1.得到原本的镜像地址 npm get registry > https://registry.npmjs.org/ 设成淘宝的 npm config set registry http://r ...
- python高级(五)—— python函数(一等对象)
本文主要内容 一等对象 普通函数 & 高阶函数 可调用对象 & 自定义可调用类型 函数内省 函数注释 python高级——目录 文中代码均放在github上:https://githu ...
- 洛谷 P4248 / loj 2377 [AHOI2013] 差异 题解【后缀自动机】【树形DP】
可能是一个 SAM 常用技巧?感觉 SAM 的基础题好多啊.. 题目描述 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀,求: \[ ...
- 解决js array的key不为数字时获取长度的问题
最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...