在PL/SQL中使用集合
1.PL/SQL集合方法
方法 |
说明 |
count() |
返回集合中元素的数目,嵌套表中有可能有空数据,所以返回的是非空元素数据 |
delete() |
删除集合中的元素,delete():删除所有元素,delete(n):删除第n个元素,delete(n,m):删除第n到m个元素,变长数组是连续的,所以不能删除单个元素。 |
exists() |
如果集合的第n个元素存在,返回true。 |
extend() |
在集合的末尾添加元素 |
first() |
返回集合中第一个元素的索引。 |
last() |
返回集合中最后一个元素的索引。 |
limit() |
对于嵌套表,如果没有生命大小,则返回为空。对于变长数组,返回变长数组可以包含的元素的最大数目。 |
next() |
返回n后面的元素的索引 |
prior() |
返回n前面的元素的索引。 |
trim() |
删除集合末尾的元素 |
创建和使用多级集合
1.使用多级集合
create type t_varray_phone as varray(3) of varchar2(14);
create type t_address as object (
street varchar2(15),
city varchar2(15),
state char(2),
zip varchar2(5),
phone_number t_varray_address
);
create type t_nested_table_address as table of t_address;
create table customer_with_nested_tabel (
id integer primary key,
first_name varchar(10),
last_name varchar(10),
addresses t_nested_table_address
)
nested table
addresses
store as
nested_addresses;
Oracle Database 10g对集合的增强
1.关联数据
create procedure customers_associative_array as
type t_assoc_array is table of number index by varchar2(15);
v_customer_array t_assoc_array;
begin
v_customer_array('jason') := 32,
v_customer_array('zoey') := 28;
dbms_output.put_line(v_customer_array('jason'));
dbms_output.put_line(v_customer_array('zoey'));
end customers_associative_array;
2.更改元素类型的大小
alter type t_varray_address
modify element type varchar2(60) cascade;
3.增加变长数组中元素的个数
alter type t_varray_address
modify limit 5 cascade;
4.为嵌套表的存储表使用不同的表空间
create table cust_with_nested_tabel (
id integer primary key,
first_name varchar(10),
last_name varchar(10),
addresses t_nested_table_address
)
nested table
addresses
store as
nested_addresses tablespace users;
5.嵌套表对ANSI的支持
操作符 |
说明 |
=和<> |
比较两个嵌套表: 1. 两个表的类型相同 2. 两个表的基数相同 3. 两个表的所有元素的值相等 |
in和not in |
检查一个嵌套表是否出现在另一个嵌套表中 |
submultiset of |
检查一个嵌套表的元素是否是另一个嵌套表的子集 |
multiset intersect |
两个嵌套表的元素的共有元素 |
multiset union |
两个嵌套表的元素之和 |
multiset except |
第一个嵌套表有而第二个嵌套表中没有的元素 |
all |
所有元素都返回 |
distinct |
只有非重复元素才在返回的嵌套表中。 |
member of |
检查嵌套表的元素是否存在 |
is a set |
检查嵌套表中的元素是否是各不相同的 |
is empty |
检查嵌套表是否不包含任何元素 |
函数:
函数 |
说明 |
cardinality() |
返回集合中元素的数目。 |
set() |
首先将嵌套表转换为集合,然后染出集合中的重复元素,最后将集合作为嵌套表返回。 |
powermultiset() |
返回给定嵌套表中元素的所有集合 |
powermultiset_by_cardinality() |
返回给定嵌套表中元素的某些集合,这些组合都具有特定的元素数量。 |