oracle:集合(二)

在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() 返回给定嵌套表中元素的某些集合,这些组合都具有特定的元素数量。

猜你喜欢

转载自blog.csdn.net/u011008029/article/details/78502812