Oracle 自定义数据类型Type
引言
这个月项目中实现了一个动态汇总并且导出到Excel的功能,妈蛋,为了实现这个功能,一个网格页面就用了20+个存储过程和自定义函数,终于完成了初步测试工作,其中快把我所掌握的不掌握的Oracle知识都快用完了,其中有行转列(XML)、列转行、动态表、动态SQL、自定义Type、管道函数、数据流函数等,为了加深印象,便于梳理自己的知识体系,也给一些需要的人一些帮助吧,先从自定义数据类型开始总结。
Oracle 自定义类型的种类
记录数据类型(Record)和记录表类型(Table),其中记录数据类型Record存储是一条记录,记录表类型Table用来存储多条记录。如果记录数据类型Record是一维数组的话,记录表类型Table就是二维数组。
自定义类型有两种写法:TYPE……IS和CREATE TYPE ……,两者区别在于:前者一般在存储过程和函数中定义,其作用域是所在过程或函数,而后者声明对象类型,对象类型则是作为一个数据库对象(像表、索引、视图、触发器一样,是一个数据库对象),可以过程或函数中使用,还可以在定义表时,作为字段的类型。
一、TYPE type_name IS RECORD 定义记录数据类型
定义语法:
TYPE type_name IS RECORD (字段名1 数据库变量类型1,字段名2 数据库变量类型2,...字段名n 数据库变量类型n);其中type_name:自定义类型的名称
应用例子
DECLARE TYPE type_Employee IS RECORD(name VARCHAR2(100),age NUMBER(3),wage NUMBER(7,2));v_employs type_Employee;v_name VARCHAR2(100);v_age NUMBER(3);v_wage NUMBER(7,2);i integer;
BEGINselect name, age, wage into v_employs from Employees where EmployeesId = '750adfd0-f8cd-4a64-a2f8-736f8802ec87';v_name := v_employs.name;v_age := v_employs.age;v_wage := v_employs.wage;dbms_output.put_line(v_name);dbms_output.put_line(v_wage);dbms_output.put_line(v_age);
END;
执行结果
cmo 888,888 1
二、TYPE table_Typename IS TABLE 定义表记录类型
定义语法:
TYPE table_Typename IS TABLE OF element_typeINDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2]; 其中:1、table_Typename :自定义类型的名称。2、element_type:任意数据基本类型(VARCHAR2, INGEGER, NUMBER等)、记录数据类型(即TYPE type_name IS RECORD的自定义类型)等。3、INDEX BY:该语句的作用是使NUMBER类型的下标自增长,自动初始化,并分配空间,有了该语句,向表记录插入元素时,不需要显示初始化,也不需要通过扩展来分配空间。(必须写否则会报错,ORA-06531:Reference to uninitialized collection)
应用例子
declare TYPE type_Employee IS RECORD(name VARCHAR2(100),age NUMBER(3),wage NUMBER(8,2));TYPE type_Employee_Var IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;TYPE type_Employee_Rec IS TABLE OF type_Employee INDEX BY BINARY_INTEGER;TYPE type_Employee_Rowtype IS TABLE OF Employees%ROWTYPE INDEX BY BINARY_INTEGER;v_table_name type_Employee_Var;v_table_emps type_Employee_Rec;v_table_Rwotype type_Employee_Rowtype;
begindbms_output.put_line('------------基本类型VARCHAR2表记录------------'); select name into v_table_name(1) from Employees where EmployeesId = '750adfd0-f8cd-4a64-a2f8-736f8802ec87';select name into v_table_name(2) from Employees where EmployeesId = 'a01038ce-e6af-4ed4-806c-03ac7b26150b';dbms_output.put_line(v_table_name(1));dbms_output.put_line(v_table_name(2));dbms_output.put_line('------------自定义RECORD类型表记录------------');select name, age, wage into v_table_emps(1) from Employees where EmployeesId = '750adfd0-f8cd-4a64-a2f8-736f8802ec87';select name, age, wage into v_table_emps(2) from Employees where EmployeesId = 'a01038ce-e6af-4ed4-806c-03ac7b26150b';dbms_output.put_line('name:'||v_table_emps(1).name||', '||'age:'||v_table_emps(1).age||', '||'wage:'||v_table_emps(1).wage);dbms_output.put_line('name:'||v_table_emps(2).name||', '||'age:'||v_table_emps(2).age||', '||'wage:'||v_table_emps(2).wage);dbms_output.put_line('------------表记录类型表记录------------');select * into v_table_Rwotype(1) from Employees where EmployeesId = '750adfd0-f8cd-4a64-a2f8-736f8802ec87';select * into v_table_Rwotype(2) from Employees where EmployeesId = 'a01038ce-e6af-4ed4-806c-03ac7b26150b';dbms_output.put_line('name:'||v_table_Rwotype(1).name||', '||'age:'||v_table_Rwotype(1).age||', '||'wage:'||v_table_Rwotype(1).wage||', '||'ranks :'||v_table_Rwotype(1).ranks );dbms_output.put_line('name:'||v_table_Rwotype(2).name||', '||'age:'||v_table_Rwotype(2).age||', '||'wage:'||v_table_Rwotype(2).wage||', '||'ranks :'||v_table_Rwotype(2).ranks );
end;###执行结果
输出结果:
————基本类型VARCHAR2表记录————
cmo
sbpm
————自定义RECORD类型表记录————
name:cmo, age:8, wage:888,888
name:sbpm, age:30, wage:10,000
————表记录类型表记录——————
name:cmo, age:8, wage:888,888, ranks :1
name:sbpm, age:30, wage:10,000, ranks :2
附:create or replace type tabletype as table of VARCHAR2(32676)
这张表返回一个字段
返回多个
create table t_test
(id number(10),passwd VARCHAR2(10)
);create or replace type cur_test is table of t_test;
Oracle 自定义数据类型Type相关推荐
- [Oracle] 自定义数据类型Type
文章目录 Oracle 自定义类型的种类 一.TYPE type_name IS RECORD 定义记录数据类型 二.TYPE table_Typename IS TABLE 定义表记录类型 Orac ...
- Oracle自定义数据类型 1
原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...
- Oracle 自定义类型TYPE(subtype, type object, type body, type table) 用法
原 ORACLE 自定义类型 type/ object 2017年03月28日 13:58:23 tan1012194073 阅读数:5999 版权声明:本文为博主原创文章,未经博主允许不得转载. h ...
- oracle 自定义数据类型
介绍oracle数据库自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float-但有时候我们需要特殊的格式,如将name定义为(first ...
- oracle自定义的记录类型,oracle 自定义类型 type / create type
一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...
- VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件
目录 1.各种数据类型 2.VBA定义公共数组(全局都可以使用) 3.读写文件 SJIS 写入 UTF8 写入 读取 SJIS 读取 UTF-8 4.异常处理 5.忽略错误 6.其他常用1 7.其他常 ...
- Go支持自定义数据类型:使用type来定义,类似于数据类型的一个别名
为了简化数据类型定义,Go支持自定义数据类型 基本语法: type 自定义数据类型名 数据类型 可以理解为 : 相当于起了一个别名 例如:type mylnt int ----->这时mylnt ...
- ORACLE数据库数据类型
Oracle的数据类型 Oracle的数据类型分为标量(Scalar)类型.复合(Composite)类型.引用(Reference)类型和LOB(Large Object)类型4种类型. 因为标量类 ...
- oracle中的type是什么意思,oracle中type
oracle中type oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式,如将na ...
最新文章
- ImportError: dynamic module does not define module export function (PyInit_example)
- Leader/Follower多线程网络模型介绍
- 【数据结构与算法】之深入解析“把二叉搜索树转换为累加树”和“从二叉搜索树到更大和树”的求解思路与算法示例
- Elasticsearch之插件介绍及安装
- SqlServer自定义排序
- Jetty 类载入问题处理
- 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
- Tomcat xxx unbound
- 解决xx is not in the sudoers file. This incident will be reported.问题
- 机器人教练走进驾校_“机器人教练”走进镇江驾校
- amazon sqs java_Amazon SQS消息多传递
- Android 权限的一个类型系统模型
- “狗屁不通”文章生成器网页版代码
- 百色职称计算机,初级职称申请百色
- Android锁屏Demo
- 万万没想到,“红孩儿” 竟然做了程序员,还是 CTO!
- 国内外知名云服务公司介绍
- 内网Gitlab如何拉取代码
- 使用EKF融合odometry及imu数据
- Vue3封装Video.js组件(基于video.js)
热门文章
- Android Wear 开发者预览版安装
- mysql查询同名同姓重名人数,全国同名同姓人数在线查询,重名率查询
- 全国计算机职称考试excel2003,全国计算机职称考试excel2003题库.pdf
- python 公司名称 相似度分析_Python文本相似度分析
- AI修图市场潜力大,分析全方位
- xc7z030有多少个quad_XC7Z030-2FBG676I;XCZ7030-2FFG676I ZYNQ7系列专营
- PDF转换成JPG图片怎么转换?这两招轻松搞定
- 基于IjkPlayer的多路投屏直播
- 浣熊优化算法(COA)(含MATLAB代码)
- 作业录屏+露脸+视频裁剪+字幕添加(支持双语)