赞
踩
集合是Oracle中的一种数据类型,存放一组数据类型相同的数据。
由 下标 和 值组成。
下标的类型包含 数字类型(整数类型、pls_integer和binary_integer) 和 字符串类型。
值的类型是数据库中所有的类型(基本数据类型、记录类型(record、%rowtype、%type)和集合类型)。
pls_integer和binary_integer相当于number类型,但比number类型占用内存较少、算术运算速度更快。
pls_integer进行的运算发生溢出时,会触发异常,执行是由硬件cpu来运行的,执行速度快.binary_integer不会触发异常,类型变量时由Oracle来执行的,不会溢出,但是执行慢,都是整形类型。
集合是一个比较广义的概念,在PL/SQL中提供了3种类型的集合:
索引表:可以通过数字或字符串作为下标来查找其中的元素,只能在PL/SQL中使用。
嵌套表:拥有索引表的所有特性,但是下标只能是数据类型(连续的整数)。在PL/SQL和数据库中均可使用。
变长数组:下标只能是数字类型,创建时需要指定最大长度。在PL/SQL和数据库中均可使用。
集合属性/方法 | 描述 |
---|---|
first | 取集合第一个元素的下标 |
last | 取集合最后一个元素的下标 |
next(下标) | 取集合当前元素的下一个元素的下标 |
prior(下标) | 取集合当前元素的上一个元素的下标 |
count | 得到集合中元素的个数 |
delete | 删除集合中的元素 |
limit | 去集合最大元素的个数(变长数组) |
--定义索引表类型的语法:
type 类型名称 is table of 元素值的数据类型 index by 下标的数据类型;
--索引变量的声明
变量名 类型名;
--索引变量的使用
变量名(下标);
declare
type type1 is table of varchar2(30) index by pls_integer;
names type1;
begin
names(1):='小曹同学1';
names(2):='小曹同学2';
names(3):='小曹同学3';
dbms_output.put_line(names(1));
end;
declare
type type2 is table of varchar2(30) index by varchar2(10);
names type2;
begin
names('a'):='小曹同学1';
names('b'):='小曹同学2';
names('c'):='小曹同学3';
dbms_output.put_line(names.first); --a
dbms_output.put_line(names.last); --c
dbms_output.put_line(names.next(names.first)); --b
dbms_output.put_line(names.prior(names.last)); --b
dbms_output.put_line(names.count); --3
names.delete;
end;
集合提供了 bulk collect 语句获取表中数据。
通过 bulk collect 语句存入集合中的元素下标从1开始且是连续的,且集合下标必须是数字类型。
select 列.. bulk collect into 集合变量 from 表 where条件
--案例:
declare
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。