一:PL/SQL集合

集合是一个有序且存有相同的类型数据的数据结构。

PL/SQL提供了三种集合类型:

  • 索引表(关联数组)

  • 嵌套表

  • 数组

二:索引表:一个索引表(也叫关联数组)是一组键 - 值对。每个键是唯一的,并且用于定位对应的值。键可以是整数或字符串。【其实就是 Map类型】

1)创建索引表

TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY subscript_type; //定义索引表类型:指明值类型和键类型

table_name type_name; //使用索引表类型定义索引表变量

2)例子

DECLARE
TYPE salary IS TABLE OF NUMBER INDEX BY VARCHAR2(20); //定义索引表类型
salary_list salary; //创建索引表
name VARCHAR2(20);
BEGIN
-- adding elements to the table
salary_list('Rajnish') := 62000; //为索引表add键值对
salary_list('Minakshi') := 75000;
salary_list('Martin') := 100000;
salary_list('James') := 78000; -- printing the table
name := salary_list.FIRST;
WHILE name IS NOT null LOOP
dbms_output.put_line
('Salary of ' || name || ' is ' || TO_CHAR(salary_list(name))); //访问索引表元素
name := salary_list.NEXT(name);
END LOOP;
END;

三:嵌套表:大小可以动态的数组。【就是ArrayList】

1)创建嵌套表

TYPE type_name IS TABLE OF element_type [NOT NULL]; //声明嵌套表类型,指明元素的数据类型【不用指明大小!】

table_name type_name; //创建嵌套表变量

2)为嵌套表赋值

table_name := type_name(val1,val2...);

3)访问嵌套表元素

table_name(i)

4)例子

DECLARE
TYPE names_table IS TABLE OF VARCHAR2(10);
TYPE grades IS TABLE OF INTEGER; names names_table;
marks grades;
total integer;
BEGIN
names := names_table('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i IN 1 .. total LOOP
dbms_output.put_line('Student:'||names(i)||', Marks:' || marks(i));
end loop;
END;

四:数组

1:PL/SQL中,数组是VARRAY,其可存储相同类型元素的一个固定大小的连续集合。

2:声明数组类型:指定最大长度,存储在VARRAY元素的类型。

TYPE varray_type_name IS VARRAY(n) of <element_type>  #注意:这里不是创建数组,而是数组类型。即:声明一种类型,其  能存放n个  elementtype类型  的数据。

3:使用数组类型创建变量

array varray_type_name;

4:为数组变量赋值

array := varray_type_name(元素1,元素2,元素3...)

5:获取数组元素

array(i) #i是下标

例如:

DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10); #声明一种数组类型
type grades IS VARRAY(5) OF INTEGER; #声明一种数组类型
names namesarray; #创建数组变量
marks grades; #创建数组变量
total integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); #为数组赋值
marks:= grades(98, 97, 78, 87, 92);#为数组赋值
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
dbms_output.put_line('Student: ' || names(i) || '
Marks: ' || marks(i)); #获取数组元素
END LOOP;
END;

五:集合方法

S.N. 方法名称及用途
1 EXISTS(n)
返回TRUE,如果一个集合中的第n个元素的存在;否则返回FALSE
2 COUNT
返回集合当前包含的元素数量
3 LIMIT
检查集合的最大尺寸
4 FIRST
返回在使用整数下标集合的第一个(最小的)索引号
5 LAST
返回在使用整数下标集合的最后一个(最大的)索引号
6 PRIOR(n)
返回集合中索引n前面的索引号
7 NEXT(n)
返回索引n的下一个索引号
8 EXTEND
追加1个空元素到集合
9 EXTEND(n)
追加n个空元素到集合
10 EXTEND(n,i)
追加的第i个元素的集合的n个拷贝
11 TRIM
移除集合的末尾一个元素
12 TRIM(n)
移除一个集合末尾的n个元素
13 DELETE
移除一个集合中的所有元素,设置计数为0
14 DELETE(n)
移除关联数组用数字键或嵌套表中的第n个元素。如果关联数组有一个字符串键,对应于该键的值的元素将被删除。如果n为空,DELETE(N)什么都不做
15 DELETE(m,n)
移除关联数组或嵌套表范围m..n所有元素。如果m大于n或如果m大于或n是零,DELETE(M,N)什么也不做

六:集合异常

COLLECTION_IS_NULL 尝试在一个原子空(null)的集合操作
NO_DATA_FOUND 下标指定被删除的元素,或关联数组的一个不存在的元素
SUBSCRIPT_BEYOND_COUNT 下标超过了一个集合的元素数
SUBSCRIPT_OUTSIDE_LIMIT 下标超出了允许的范围
VALUE_ERROR 下标为空(null)或不可转换的键类型。如果该键被定义为PLS_INTEGER范围,下标是在该范围之外可能会出现这样的异常

PL/SQL学习笔记之集合的更多相关文章

  1. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. PL/SQL学习笔记之异常

    一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...

  4. PL/SQL学习笔记_02_游标

    在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. 为了处理 SQL 语句, ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处 ...

  5. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  6. PL\SQL学习笔记

    注释 单行--多行 一.declare一般用于做变量的申明.begin 程序体开始执行  end; 程序体结束exception .. dbms_output.put_line('绝对值'||v_ab ...

  7. PL/SQL学习笔记_01_基础

    PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command  窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command  窗口中运行的步骤如下: 1)File—new com ...

  8. PL/SQL学习笔记程序单元

    一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...

  9. PL/SQL学习笔记之日期时间

    一:PL/SQL时间相关类型 PL/SQL提供两个和日期时间相关的数据类型: 日期时间(Datetime)数据类型 时间间隔类型 二:日期时间类型 datetime数据类型有: DATE TIMEST ...

随机推荐

  1. 014 Security的认证流程源码级详解

    一:任务 1.任务 认证处理流程说明 认证结果如何在多个请求之间共享 获取认证用户信息 二:认证处理流程处理说明 1.流程图 这里只是一个登陆到登陆的认证部分的流程图. 2.流程解释 3.断点跟踪 页 ...

  2. 065 updateStateByKey的函数API

    一:使用场景 1.应用场景 数据的累加 一段时间内的数据的累加 2.说明 每个批次都输出自己批次的数据, 这个时候,可以使用这个API,使得他们之间产生联系. 3.说明2 在累加器的时候,起到的效果和 ...

  3. LoadRunner的函数

     一.基础函数 在VU左边导航栏中,有三个LR框架函数,分别是vuser_init(),Action(),vuser_end(). 这三个函数存在于任何Vuser类型的脚本中: ●vuser_init ...

  4. 安排~~炒鸡全的JS兼容问题,码上-----【XUEBIG】

    如何处理兼容问题 如果两个都是属性,用逻辑||做兼容 如果有一个是方法,用三元做兼容 如果是多个属性或方法,封装函数做兼容 两个小知识点: 1.取消拖拽的默认行为: document.ondragst ...

  5. HTML文本结构及常用标签

    一.什么是HTML? HTML:超文本标签语言 (Hyper Text Markup Language) www万维网的描述性语言. XHTML指可扩展超文本标记语言(标识语言)(EXtensible ...

  6. CISCO ACL配置(目前)

    什么是ACL? 访问控制列表简称为ACL,访问控制列表使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制 ...

  7. Xamarin Essentials教程屏幕状态DeviceDisplay

    Xamarin Essentials教程屏幕状态DeviceDisplay   由于移动设备型号众多,采用的显示屏幕也千差万别.为了获取较好的显示效果,应用程序往往需要获取设备的显示状态,如屏幕参数. ...

  8. MySQL 一对多查询

    group_concat简单来说,这个函数的作用就是连接多个字段 数据表首先我们先建立两个表 CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREME ...

  9. 2017-9-8-Linux下VNC server开启&图形界面显示

    之前有一个写树莓派3B怎么只使用网线VNC远程的blog,里面写的比较粗糙(其实是很长时间没搞我也忘了怎么装的了,照着原来的看一遍应该能想起来),所以重新来在新的环境下搭建一下VNC server. ...

  10. 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。

    #题目如下:1:人和机器进行猜拳游戏写成一个类,首先选择角色:1 曹操 2张飞 3 刘备,然后选择的角色进行猜拳:1剪刀 2石头 3布 玩家输入一个1-3的数字 : 1 import random c ...