Adrian Billington 在他的文章collection extensions in 10g 中对10g增加的对collection增加的类似在SQL语句中的UNION, MINUS等集合操作有着详细的介绍。在10g之后,我们就可以像对两个SQL语句(其实也就是两个集合)那样来求两个collection的并集,差集等等。
下面是对该篇文章的摘要,
1. 比较两个collection是否相等
可以直接用 = 来判断两个collection是否相等,即每个collection中的元素是否相等,不需要通过手动loop来遍历collection中的每个元素来比较。
2. CARDINALITY函数
cardinality 函数类似于SQL中的COUNT函数,可以用来得到一个collection中元素的个数,注意是不管一个collection中是否有重复元素,它只是返回元素的总数。
cardinality 函数既可以用在PL/SQL中,也可以直接应用于SQL语句中。
3. SET 函数
Set, 顾名思义,就是集合,自然是它包含的元素没有重复的,因此SET函数用来返回给定一个COLLECTION中唯一元素组成的COLLECTION。
因此如果想得到给定一个COLLECTION中的唯一的元素有几个,可以综合SET和CARDINALITY函数来用,就像下面这样,
SELECT CARDINALITY(SET(varchar2_ntt(‘A’, ‘A’, ‘B’, ‘C’))) from dual;
4. 可以通过 is (not) a set 来判断一个collection是否满足set的条件, 即内部没有重复元素
5. 可以通过 is (not) empty 来判断一个collection是否含有元素
6. submultiset conditions
submultiset of 用来判断一个collection是不是另一个collection的子集。
类似的,还有另外member condition, 不过不同的是member of 用来判断给定的字面常量(literal)或者绑定变量(bind vairables)是否存在一个collection中。
7. multiset 操作符
这些操作符类似于SQL语句中的union, union all, minus等, 只不过是用来作用于collection上。
下图给出了multiset操作符跟SQL中set操作符的对应关系,
8. powermultiset 函数
这个函数不是很常用,用来返回给定一个collection中所有子元素的全排列组合,每个排列组合是一个collection。