一: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. 020100——00002_OS库

    OS 库中文文档:https://yiyibooks.cn/xx/python_352/library/os.html OS 库英文文档:https://docs.python.org/3/libra ...

  2. win10系统桌面快捷键图标异常解决方法

    win10系统桌面快捷键图标异常解决方法 前言: 有一次我的一个图标变成白色,找到:https://jingyan.baidu.com/article/948f5924148e67d80ef5f947 ...

  3. laravel启动过程简单解析

    :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px ...

  4. ps选区的两种复制方法

    1.选区选中之后,利用移动工具,按住alt键,拖动即可复制所选区域. ps:再一个图层上操作. 2.选区选中之后,Ctrl+c .Ctrl+v复制粘贴,按Ctrl+T移动. ps:新建一个图层操作,不 ...

  5. SpringBoot+Mybatis+MySql学习

    介绍一下SpringBoot整合mybatis,数据库选用的是mysql. 首先创建数据库 CREATE DATABASE test; 建表以及插入初始数据(sql是从navicat中导出的) SET ...

  6. PAT (Advanced Level) Practise 1004 解题报告

    GitHub markdownPDF 问题描述 解题思路 代码 提交记录 问题描述 Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 1600 ...

  7. Codeforces.1096E.The Top Scorer(组合)

    题目链接 感觉这题很裸啊,除了看着恶心点也没什么了,怎么过的人那么少.. \(Description\) 给定\(n,r,s\),表示有\(n\)个人,设每个人的得分是非负整数\(a_i\),已知第一 ...

  8. JavaScript基础笔记(十一)JSON

    JSON 关于JSON,最重要的一点是理解它是一种数据格式,不是编程语言. 一.语法 JSON 不支持变量.函数或对象实例,它就是一种表示结构化数据的格式,虽然与 JavaScript 中表示数据的某 ...

  9. php商品条件筛选功能你是怎么做出来的?

    php商品条件筛选功能你是怎么做出来的? php按条件筛选商品的功能,还是比较简单的.其实就是根据不同的条件组成SQL查询条件,从数据库里查出不同的商品出来.举个例子:用户可以按价格范围.按品牌.按商 ...

  10. 线段树入门&lazy思想

    线段树将区间分成若干个子区间,子区间又继续分,直到区间为一个点(区间左值等于右值) 对于父区间[a,b],其子区间为[a,(a+b)/2]和[(a+b)/2+1,b] 用于求区间的值,如区间最值.区间 ...