PL/SQL学习笔记之集合
一: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学习笔记之集合的更多相关文章
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- PL/SQL学习笔记之异常
一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...
- PL/SQL学习笔记_02_游标
在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. 为了处理 SQL 语句, ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处 ...
- [Oracle] PL/SQL学习笔记
-- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...
- PL\SQL学习笔记
注释 单行--多行 一.declare一般用于做变量的申明.begin 程序体开始执行 end; 程序体结束exception .. dbms_output.put_line('绝对值'||v_ab ...
- PL/SQL学习笔记_01_基础
PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command 窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command 窗口中运行的步骤如下: 1)File—new com ...
- PL/SQL学习笔记程序单元
一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...
- PL/SQL学习笔记之日期时间
一:PL/SQL时间相关类型 PL/SQL提供两个和日期时间相关的数据类型: 日期时间(Datetime)数据类型 时间间隔类型 二:日期时间类型 datetime数据类型有: DATE TIMEST ...
随机推荐
- 010 pandas的DataFrame
一:创建 1.通过二维数组进行创建 2.取值 取列,取位置的值 3.切片取值 这个和上面的有些不同,这里先取行,再取列 4.设定列索引 这里使用的行索引与上面不同. 5.通过字典的方式创建 6.索引 ...
- Python 小程序之 恋爱表情包爬取
虽然恋爱跟我一毛钱关系没有,,但是我还是想爬它 实验爬取网址:http://qq.yh31.com/zjbq/1491124.html # -*- coding: utf-8 -*- # @Time ...
- forward 和redirect
http://www.cnblogs.com/davidwang456/p/3998013.html
- win10系统桌面快捷键图标异常解决方法
win10系统桌面快捷键图标异常解决方法 前言: 有一次我的一个图标变成白色,找到:https://jingyan.baidu.com/article/948f5924148e67d80ef5f947 ...
- JAVA基础中的注意点(一)
1.标识符 标识符:标识某些事物用于区分的符号. (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字(0-9).下划线(_)或美 ...
- POJ 3020 Antenna Placement (二分图最小路径覆盖)
<题目链接> 题目大意:一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,每放置一个基站,至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使得所有的城市都覆盖无线? 解题分析: ...
- iOS应用 数据存储方式 (一)
沙盒是每个应用程序的空间,每个应用程序只能访问自己的文件夹,不可以跨越,访问别的程序的文件夹,这个文件夹就是该应用程序的沙盒. 沙盒中包括以下几个文件夹: 1.应用程序包:(Layer)包含了所有资源 ...
- SpringMVC(十三) RequestMapping 使用servlet原生API作为参数
SpringMVC支持以下Servlet方法: HttpServletRequest HttpServletResponse HttpSession Writer Reader Locale Inpu ...
- UVA 1592 DataBase
思路: 知识补充: ①make_pair和pair: /*pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用 ...
- 获取Android设备WIFI的MAC地址 “MAC地址”
需要指出的是:wifi状态和wifi AP状态是互斥的状态:也就是一旦发现WIFI AP打开,WIFI是不能被打开的. 获取Android设备的WIFI MAC地址,首先需要将设备中的WIFI个人热点 ...