博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PL/SQL学习笔记之集合
阅读量:2198 次
发布时间:2019-05-02

本文共 3171 字,大约阅读时间需要 10 分钟。

 

一: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 
#注意:这里不是创建数组,而是数组类型。即:声明一种类型,其 能存放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范围,下标是在该范围之外可能会出现这样的异常

转载于:https://www.cnblogs.com/ygj0930/p/8298210.html

你可能感兴趣的文章
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>