文档章节

PLSQL集合类型

爱潜水的小八
 爱潜水的小八
发布于 2017/02/17 11:55
字数 764
阅读 3
收藏 0
点赞 0
评论 0

PLSQL集合类型

 

--联合数组(索引表)

/*

用于存储某个数据类型的数据集合类型 。通过索引获得联合数组中得值

如下例子:

*/

DECLARE 

 CURSOR cur_chars IS SELECT chars FROM a;--声明游标

 TYPE str_type IS TABLE OF a.chars%TYPE--声明联合数组

 INDEX BY BINARY_INTEGER; --声明联合数组的索引

 strs str_type;--声明str_type 的联合数组strs

 counts INTEGER := 0;

BEGIN 

  FOR cur_chars_rec IN cur_chars LOOP

    counts := counts + 1;

    strs(counts) := cur_chars_rec.chars;

    dbms_output.put_line('counts('||counts||'):'||strs(counts));

  END LOOP;

END;

这个联合索引类型其实就是表数据的索引,定义游标然后把遍历到的结果存放在联合数组中,就相当于程序的基本数据类型数组

1.声明游标用来遍历表数据2.声明联合数组用来存储游标遍历的数据集3.声明索引

4.定义联合数组 联合数组名称 联合数组type

 

strs(counts) := cur_chars_rec.chars;  联合数组赋值命令

 

 

--嵌套表

/*

plsql表类型之一,他与联合数组具有相同的结构,都是使用下标访问数组

主要区别在于,嵌套表可以存储在数据库表的列中,而联合数组不行

*/

DECLARE

 CURSOR my_cursor IS SELECT chars FROM a WHERE NUM='ww' ;--定义游标

 TYPE table_type IS TABLE OF a.chars%TYPE;--声明表类型

 table_name table_type:=table_type();--定义并初始化嵌套表

 counts INTEGER := 1;

BEGIN

  FOR my_cursor_rec IN my_cursor LOOP

    counts := counts;

    table_name.extend;--表做成可扩展的***

    table_name(counts):=my_cursor_rec.chars;

    dbms_output.put_line('counts'||counts||' := '||table_name(counts));

  END LOOP;

END;

--创建变长数组

DECLARE

 TYPE varray_type IS ARRAY(10) OF NUMBER(6);

 varray_name varray_type := varray_type(); --变长数组同嵌套表相同都需要初始化收集

 counts INTEGER := 0;

BEGIN

  FOR i IN 1..5 LOOP

    counts := counts + 1;

    varray_name.extend;

    varray_name(counts) := i;--这个都是相同的使用下标

    dbms_output.put_line('counts('||counts||'):='||i);

  END LOOP;

END;

 

  varray_name.extend; 的使用超过范围的时候需要使用扩展

  集合函数的使用count 数量 first 第一个 last 最后一个

  Varrary_array.count Varrary_array.first  Varrary_array.last

  Varrary_array.trim(4) 从后往前删除4个数组元素

 

多层集合 集合作为集合的元素

变长数组为例 就相当于数据的嵌套

--多层集合(数组的嵌套)

DECLARE

 TYPE var_type1 IS VARRAY(5) OF INTEGER;--声明变长数组

 TYPE var_type2 IS VARRAY(3) OF var_type1;--声明多层集合,集合元素类型为var_type1

 varray_integer var_type1 := var_type1(1,2,3,4,5);--集合给初始值

 varray_multi var_type2 := var_type2(varray_integer);

 

BEGIN

  FOR i IN 1..5 LOOP

    dbms_output.put_line('varray_integer('||i||'):='||varray_integer(i));

  END LOOP;

  

  varray_multi.extend;

  varray_multi(2) := var_type1(6,7,8,9,10);

  

  varray_multi.extend;

  varray_multi(3) := var_type1(5,4,3,2,1);

  

  FOR i IN 1..3 LOOP

   FOR j IN 1..5 LOOP

         dbms_output.put_line('varray_multi['||i||']'||'['||j||']=='||varray_multi(i)(j));

   END LOOP;

  END LOOP;

END;

 

 

--集合的方法

DELETE --删除集合元素

EXTEND --为集合增加元素空间,实现空间的扩展以填充新元素。

COUNT --集合元素中的数量

EXISTS --如果指定的元素在集合中存在,则返回true

DELETE --删除指定集合位置的元素

FIRST AND  LAST --集合中的第一个和最后一个元素

PRIOR AND NEXT --返回集合指定位置的前一个和后一个元素

TRIM --从集合尾部删除元素

LIMIT --返回集合允许元素的最大数量

© 著作权归作者所有

共有 人打赏支持
爱潜水的小八
粉丝 4
博文 14
码字总数 9447
作品 0
大连
程序员
PLSQL集合笔记

针对多行单列的数据处理,用之前的标量变量肯定不行,这里引入一个新的数据类型复合数据类型。 这个复合类型类似于语言的数组struct[i],包括索引表,嵌套表,边长数组三种类型, 记住记录是...

aklaus ⋅ 2017/08/04 ⋅ 0

Oracle之FORALL与BULK COLLECT简介

在上篇文章Oracle大数据的导入与更新方案中介绍了导入超大数据量的操作,而要批量更新超大数据量的操作时就需要用到本文所要介绍的FORALL与BULK COLLECT语句。 1 PL/SQL块的执行过程 当PL/SQ...

landy8530 ⋅ 03/17 ⋅ 0

【入门】plsql几种集合类型的区别

plsql中有3中集合类型。分别是可变长数组,嵌套表,关联表(索引表)。 简单的说下它们之间的区别。 1.type tnum is varray(100) of number(5); vnum tnum := tnum(1,2,3,4); 2.type tnum i...

shiwb ⋅ 2013/04/23 ⋅ 0

PLSQL子程序即PLSQL块

PLSQL重头戏来了,前期介绍的四种变量,游标,集合,都是为后续的子程序服务的,子程序包括两类一个是函数,一个是存储过程, 1)建立和调用过程 2)建立和调用函数 3)管理PLSQL子程序 sqlp...

aklaus ⋅ 2017/08/09 ⋅ 0

Oracle PLSQL的集合类型

转载:http://www.cnblogs.com/gkl0818/archive/2009/02/25/1397769.html Oracle collections 一、Types of Collections 1、Associative arrays 数组 它是同种类型的一维、无边界的稀疏集合,......

晨曦之光 ⋅ 2012/04/25 ⋅ 0

PLSQL显示number数据类型时的设置

Q:PLSQL 显示number数据类型时,有时候会因为数据太长而用科学计数法显示,这样的话就会丢失精度,如何设置可以将PLSQL显示原来的值? A: 1、tools->preperences,打开窗口,然后选择sqlwi...

Sammy夏 ⋅ 2012/09/20 ⋅ 0

Oracle专题11之PLSQL入门

1、PLSQL工具 PL/SQL Developer的简介:PL/SQL Developer是一种专门用于开发、测试、调试和优化Oracle PL/SQL的一种工具,更是一个非常好用的Oracle的管理工具。 官网下载地址:https://www...

极客微信条 ⋅ 2017/12/12 ⋅ 0

Oracle表内存储的数字溢出?

-M M M/1 M*1 M*(-1) -1.01 -0.01000000 1.847196 198.9573 -101.9573 查询语句为:select -M, M, M/1, M1,M(-1) from a; M列的数据类型为NUMBER(27,8) 请教各位,为什么这个查询这么纠结?是...

杜秀涛 ⋅ 2014/05/22 ⋅ 0

Oracle执行插入多条记录

目的:想在PLSQL里一次性执行多条SQL语句。 说明:如果是SELECT等查询语句可能会有困难,因为结果输出集合到底以哪一个为准呢?(猜测:以最后一次执行的结果为准么?) 目前的想法是:一次性...

yhb_cool ⋅ 2011/07/27 ⋅ 0

Oracle性能优化-读懂执行计划

Oracle的执行计划 得到执行计划的方式 Autotrace例子 使用Explain snippetid="1672708" snippetfilename="blog2016050512085925" name="code" class="sql">explain plan set STATEMENTID='te......

lifetragedy ⋅ 2016/05/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JDK1.6和JDK1.7中,Collections.sort的区别,

背景 最近,项目正在集成测试阶段,项目在服务器上运行了一段时间,点击表格的列进行排序的时候,有的列排序正常,有的列在排序的时候,在后台会抛出如下异常,查询到不到数据,而且在另外一...

tsmyk0715 ⋅ 34分钟前 ⋅ 0

spring RESTful

spring RESTful官方文档:http://spring.io/guides/gs/rest-service/ 1. 可以这么去理解RESTful:其实就是web对外提供的一种基于URL、URI的资源供给服务。不是一个原理性知识点。是一个方法论...

BobwithB ⋅ 36分钟前 ⋅ 0

C++ 中命名空间的 5 个常见用法

相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名...

柳猫 ⋅ 38分钟前 ⋅ 0

@Conditional派生注解

@Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效; @Conditional扩展注解 作用(判...

小致dad ⋅ 39分钟前 ⋅ 0

适配器模式

适配器模式 对象适配器 通过私有属性来实现的类适配器 通过继承来实现的接口适配器 通过继承一个默认实现的类实现的

Cobbage ⋅ 43分钟前 ⋅ 0

Java 限流策略

概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速...

轨迹_ ⋅ 46分钟前 ⋅ 0

GridView和子View之间的间隙

默认的情况下GridView和子View之间会有一个间隙,原因是GridView为了在子View被选中时在子View周围显示一个框。去掉的办法如下: android:listSelector="#0000" 或 setSelector(new ColorDra...

国仔饼 ⋅ 50分钟前 ⋅ 0

idea插件开发

1 刷新页面要使用多线程 2 调试要使用restart bug 不要去关闭调试的idea 否则再次启动会卡住

林伟琨 ⋅ 50分钟前 ⋅ 0

Java 内存模型

物理机并发处理方案 绝大多数计算任务,并不是单纯依赖 cpu 的计算完成,不可避免需要与内存交互,获取数据。内存要拿到数据,需要和硬盘发生 I/O 操作。计算机存储设备与 cpu 之间的处理速度...

长安一梦 ⋅ 57分钟前 ⋅ 0

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部