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 --返回集合允许元素的最大数量

PLSQL集合类型的更多相关文章

  1. PLSQL集合类型的使用总结

    PLSQL集合类型的使用总结 在pl sql 中,集合(collection) 是一组有序的元素组成的对象,这些元素的类型必须一致. pl sql 将collection 分成3 类,分别为Assoc ...

  2. JAVA集合类型详解

    一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ...

  3. C#集合类型大盘点

    C#集体类型( Collections in C#) 集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话 ...

  4. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  5. Spring中集合类型属性注入

    我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...

  6. Redis常用命令入门5:有序集合类型

    有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ...

  7. Redis常用命令入门4:集合类型

    集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...

  8. Redis从基础命令到实战之有序集合类型(SortedSet)

    有序集合类型是Redis五种数据类型中最高级的.也是最复杂的类型.有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一 ...

  9. Redis从基础命令到实战之集合类型(Set)

    Redis集合类型的基础功能也是存储字符串列表,和列表类型的区别是字符串不能重复且没有顺序.当然,存储元素唯一性也可以通过应用程序保证,单从这一点上并没有体现出对比列表类型的特点. 其实,集合类型的一 ...

随机推荐

  1. MSF入侵安卓手机

    MSF是Metasploit的简称,Metasploit是一款开源的安全漏洞检测工具,非常强大,分别有Windows版和Linux版,工具里集成了许多微软公布的漏洞(0day). 我这里做测试的系统是 ...

  2. CUDA 深入浅出谈[转]

    CUDA 深入浅出谈           “CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定 ...

  3. mongo删除、添加分片

    MongoDB 分片的原理.搭建.应用   一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处 ...

  4. 撸一个简单的MVVM例子

    我个人以为mvvm框架里面最重要的一点就是VM这部分,它要与Model层建立联系,将Model层转换成可以被View层识别的数据结构:其次也要同View建立联系,将数据及时更新到View层上,并且响应 ...

  5. 轻量ORM-SqlRepoEx (六) JOIN

    示例使用的是最新 SqlRepoEx 2.0.2 可在:https://github.com/AzThinker/SqlRepoEx2.0Demo 或:https://gitee.com/azthin ...

  6. DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果

    DB数据源之SpringBoot+MyBatis踏坑过程(四)没有使用连接池的后果 liuyuhang原创,未经允许禁止转载  系列目录连接 DB数据源之SpringBoot+Mybatis踏坑过程实 ...

  7. Vue--- 一点车项目 连接数据库

    Vue--- 一点车项目  连接数据库 创建连接数据库配置 ###导入 const Koa = require('koa'); const Router = require('koa-router') ...

  8. 557. Reverse Words in a String III (5月25日)

    解答 class Solution { public: string reverseWords(string s) { string temp,result; while(1){ if(s.find( ...

  9. RCF的简单使用教程以及什么是回调函数

    RCF的使用教程 RCF(Remote Call Framework)是一个使用C++编写的RPC框架,在底层RCF支持多种传输实现方式(transport implementations). 包括T ...

  10. js实现所有异步请求全部加载完毕后,loading效果消失

    在实际开发中,一定有情况是这样的,一个页面我们有多个地方请求了ajax,在这种情况下,我们要实现数据没来之前出现我们炫酷的loading效果,而且要等到所有的ajax都请求完毕后,才让我们的loadi ...