WEB开发网
开发学院数据库Oracle Oracle10g中新的多重集运算符解析 阅读

Oracle10g中新的多重集运算符解析

 2007-05-09 12:11:49 来源:WEB开发网   
核心提示: 你还可以使用CARDINALITY 函数来得到某个嵌套表中元素的个数,select cardinality(num) from num_tab;CARDINALITY(NUM)533数据库认为不存在重复值的嵌套表是一个SET,Oracle10g中新的多重集运算符解析(3),事实上,存在函数

你还可以使用CARDINALITY 函数来得到某个嵌套表中元素的个数。

select cardinality(num) from num_tab;

CARDINALITY(NUM)

----------------

5

3

3

数据库认为不存在重复值的嵌套表是一个SET。事实上,存在函数SET ,它可以通过删除嵌套表中重复的数据从而将一个嵌套表转化成一个SET。同样还有一个新的 SQL 子句——IS A SET,在嵌套表中不存在重复值的时候返回真值。

select num from num_tab where num is a set;
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5)
NUM_TAB_TYP(1, 3, 5)
NUM_TAB_TYP(2, 4, 6)
select num from num_tab where num multiset union num_tab_typ(1) is a set;
NUM
--------------------------
NUM_TAB_TYP(2, 4, 6)

现在你也可以使用IS EMPTY 这个新的SQL 子句来判断嵌套表中的值是否为空。.

select num from num_tab where num multiset intersect

num_tab_typ(1) is empty;

NUM

--------------------------

NUM_TAB_TYP(2, 4, 6)

除此之外,还有另外一个新的 SQL 子句,是用于判断某个值是否是一个嵌套表的成员。如下例所示:

select num from num_tab where 3 member of num;
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5)
NUM_TAB_TYP(1, 3, 5)
select num from num_tab where 3 not member of num;
NUM

--------------------------

NUM_TAB_TYP(2, 4, 6)

你也可以通过使用 SUBMULTISET 来判断一个嵌套表是否是一个多重集的子集。

select num from num_tab where num_tab_typ(1,3,5) submultiset of num;

NUM

--------------------------

NUM_TAB_TYP(1, 2, 3, 4, 5)

NUM_TAB_TYP(1, 3, 5)

最后,还有一个非常有趣的函数——POWERMULTISET ,它可以得到某个给定的多重集的所有子集。下面给出了关于这个函数的一个例子:create or replace type num_tab_tab_typ as table of num_tab_typ;
/
show errors;
select cast(powermultiset(num) as num_tab_tab_typ) from num_tab
where num = num_tab_typ(2,4,6);
CAST(POWERMULTISET(NUM)ASNUM_TAB_TAB_TYP)
--------------------------
NUM_TAB_TAB_TYP(NUM_TAB_TYP(2), NUM_TAB_TYP(4), NUM_TAB_TYP(2, 4),
NUM_TAB_TYP(6), NUM_TAB_TYP(2, 6),
NUM_TAB_TYP(4, 6), NUM_TAB_TYP(2, 4, 6))
你还可以使用 POWERMULTISET_BY_CARDINALITY 来约束 POWERMULTISET 函数的返回结果,最后的结果必须满足其包含元素的个数等于某个指定的值。还是以上面的那个例子为例,下面有一段代码,功能是返回所有只包含了两个元素的子集。select cast(powermultiset_by_cardinality(num,2) as num_tab_tab_typ) num
from num_tab
where num = num_tab_typ(2,4,6);
NUM
--------------------------
NUM_TAB_TAB_TYP(NUM_TAB_TYP(2, 4), NUM_TAB_TYP(2, 6), NUM_TAB_TYP(4, 6))

上一页  1 2 3 

Tags:Oracleg 中新 多重

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接