引言

这个月项目中实现了一个动态汇总并且导出到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相关推荐

  1. [Oracle] 自定义数据类型Type

    文章目录 Oracle 自定义类型的种类 一.TYPE type_name IS RECORD 定义记录数据类型 二.TYPE table_Typename IS TABLE 定义表记录类型 Orac ...

  2. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  3. Oracle 自定义类型TYPE(subtype, type object, type body, type table) 用法

    原 ORACLE 自定义类型 type/ object 2017年03月28日 13:58:23 tan1012194073 阅读数:5999 版权声明:本文为博主原创文章,未经博主允许不得转载. h ...

  4. oracle 自定义数据类型

    介绍oracle数据库自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float-但有时候我们需要特殊的格式,如将name定义为(first ...

  5. oracle自定义的记录类型,oracle 自定义类型 type / create type

    一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarchar2. 2.数值类型.如:int.number(p,s).integ ...

  6. VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件

    目录 1.各种数据类型 2.VBA定义公共数组(全局都可以使用) 3.读写文件 SJIS 写入 UTF8 写入 读取 SJIS 读取 UTF-8 4.异常处理 5.忽略错误 6.其他常用1 7.其他常 ...

  7. Go支持自定义数据类型:使用type来定义,类似于数据类型的一个别名

    为了简化数据类型定义,Go支持自定义数据类型 基本语法: type 自定义数据类型名 数据类型 可以理解为 : 相当于起了一个别名 例如:type mylnt int ----->这时mylnt ...

  8. ORACLE数据库数据类型

    Oracle的数据类型 Oracle的数据类型分为标量(Scalar)类型.复合(Composite)类型.引用(Reference)类型和LOB(Large Object)类型4种类型. 因为标量类 ...

  9. oracle中的type是什么意思,oracle中type

    oracle中type oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式,如将na ...

最新文章

  1. ImportError: dynamic module does not define module export function (PyInit_example)
  2. Leader/Follower多线程网络模型介绍
  3. 【数据结构与算法】之深入解析“把二叉搜索树转换为累加树”和“从二叉搜索树到更大和树”的求解思路与算法示例
  4. Elasticsearch之插件介绍及安装
  5. SqlServer自定义排序
  6. Jetty 类载入问题处理
  7. 【Pytorch神经网络实战案例】08 识别黑白图中的服装图案(Fashion-MNIST)
  8. Tomcat xxx unbound
  9. 解决xx is not in the sudoers file. This incident will be reported.问题
  10. 机器人教练走进驾校_“机器人教练”走进镇江驾校
  11. amazon sqs java_Amazon SQS消息多传递
  12. Android 权限的一个类型系统模型
  13. “狗屁不通”文章生成器网页版代码
  14. 百色职称计算机,初级职称申请百色
  15. Android锁屏Demo
  16. 万万没想到,“红孩儿” 竟然做了程序员,还是 CTO!
  17. 国内外知名云服务公司介绍
  18. 内网Gitlab如何拉取代码
  19. 使用EKF融合odometry及imu数据
  20. Vue3封装Video.js组件(基于video.js)

热门文章

  1. Android Wear 开发者预览版安装
  2. mysql查询同名同姓重名人数,全国同名同姓人数在线查询,重名率查询
  3. 全国计算机职称考试excel2003,全国计算机职称考试excel2003题库.pdf
  4. python 公司名称 相似度分析_Python文本相似度分析
  5. AI修图市场潜力大,分析全方位
  6. xc7z030有多少个quad_XC7Z030-2FBG676I;XCZ7030-2FFG676I ZYNQ7系列专营
  7. PDF转换成JPG图片怎么转换?这两招轻松搞定
  8. 基于IjkPlayer的多路投屏直播
  9. 浣熊优化算法(COA)(含MATLAB代码)
  10. 作业录屏+露脸+视频裁剪+字幕添加(支持双语)