深入了解Oracle10g中新的多重集运算符(下)
文章作者 100test 发表时间 2007:03:14 13:40:33
来源 100Test.Com百考试题网
除此之外,还有另外一个新的 SQL 子句,是用于判断某个值是否是一个嵌套表的成员。如下例所示:
0select num from num_tab where 3 member of num.
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5)
NUM_TAB_TYP(1, 3, 5)
0select num from num_tab where 3 not member of num.
NUM
--------------------------
NUM_TAB_TYP(2, 4, 6)
你也可以通过使用 SUBMULTISET 来判断一个嵌套表是否是一个多重集的子集。
0select 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.
0select 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 函数的返回结果,最后的结果必须满足其包含元素的个数等于某个指定的值。还是以上面的那个例子为例,下面有一段代码,功能是返回所有只包含了两个元素的子集。
0select 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))