DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt_table nt_table_type := nt_table_type(2,4,3,1,2);
nt_result nt_table_type;
BEGIN
nt_result := SET(nt_table);
dbms_output.put(‘result:‘);
FOR i IN 1..nt_result.COUNT LOOP
dbms_output.put(‘ ‘ || nt_result(i));
END LOOP;
dbms_output.new_line;
END;(2)使用MULTISET UNION操作符DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt1 nt_table_type := nt_table_type(1,2,3);
nt2 nt_table_type := nt_table_type(3,4,5);
nt_result nt_table_type;
BEGIN
--MULTISET UNION并集操作
nt_result := nt1 MULTISET UNION nt2;
dbms_output.put(‘result:‘);
FOR i IN 1..nt_result.COUNT LOOP
dbms_output.put(‘ ‘ || nt_result(i));
END LOOP;
dbms_output.new_line;
END;(3)使用MULTISET UNION DISTINCT操作符DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt1 nt_table_type := nt_table_type(1,2,3);
nt2 nt_table_type := nt_table_type(3,4,5);
nt_result nt_table_type;
BEGIN
nt_result := nt1 MULTISET UNION DISTINCT nt2;
dbms_output.put(‘result:‘);
FOR i IN 1..nt_result.COUNT LOOP
dbms_output.put(‘ ‘ || nt_result(i));
END LOOP;
dbms_output.new_line;
END;(4)使用MULTISET INTERSECT操作符DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt1 nt_table_type := nt_table_type(1,2,3);
nt2 nt_table_type := nt_table_type(3,4,5);
nt_result nt_table_type;
BEGIN
nt_result := nt1 MULTISET INTERSECT nt2;
dbms_output.put(‘result:‘);
FOR i IN 1..nt_result.COUNT LOOP
dbms_output.put(‘ ‘ || nt_result(i));
END LOOP;
dbms_output.new_line;
END;(5)使用MULTISET EXCEPT操作符DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt1 nt_table_type := nt_table_type(1,2,3);
nt2 nt_table_type := nt_table_type(3,4,5);
nt_result nt_table_type;
BEGIN
nt_result := nt1 MULTISET EXCEPT nt2;
dbms_output.put(‘result:‘);
FOR i IN 1..nt_result.COUNT LOOP
dbms_output.put(‘ ‘ || nt_result(i));
END LOOP;
dbms_output.new_line;
END;
DECLARE
TYPE name_varray_type IS VARRAY(3) OF VARCHAR2(10);
name_array name_varray_type;
BEGIN
IF name_array is NULL THEN
dbms_output.put_line(‘name_array集合未初始化‘);
END IF;
END;但Oracle 10g开始,当检测嵌套表是否为NULL时,不仅可以使用IS NULL操作符,也可以使用IS EMPTY操作符。注意IS EMPTY操作符只适用于嵌套表,而不适用于VARRAY。DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(10);
name_table name_table_type;
BEGIN
--虽然说IS EMPTY操作符可以用于嵌套表,测试结果表明有问题。
IF name_table IS EMPTY THEN
dbms_output.put_line(‘name_table集合未初始化‘);
END IF;
END;2、比较嵌套表是否相同DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(10);
name_table1 name_table_type;
name_table2 name_table_type;
BEGIN
name_table1 := name_table_type(‘张三‘);
name_table2 := NAME_table_type(‘李四‘);
IF name_table1 = name_table2 THEN
dbms_output.put_line(‘两个嵌套表完全相同‘);
ELSE
dbms_output.put_line(‘两个嵌套表完全不相同‘);
END IF;
END;
DECLARE TYPE nt_table_type IS TABLE OF NUMBER; nt_table nt_table_type := nt_table_type(1,2,3,4); BEGIN dbms_output.put_line(‘元素个数:‘ || CARDINALITY(nt_table)); dbms_output.put_line(‘元素个数:‘ || nt_table.COUNT); END;(2)使用操作符SUBMULTISET OF
DECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt_table1 nt_table_type := nt_table_type(1,3,2);
nt_table2 nt_table_type := nt_table_type(1,2,3,4);
BEGIN
IF nt_table1 SUBMULTISET nt_table2 THEN
dbms_output.put_line(‘nt_table1 是 nt_table2的子集‘);
END IF;
END;(3)使用操作符MEMBER OFDECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt_table nt_table_type := nt_table_type(1,2,3,4);
v1 NUMBER := 1;
BEGIN
IF v1 MEMBER OF nt_table THEN
dbms_output.put_line(‘v1 是 nt_table的元素‘);
END IF;
END;(4)使用操作符IS A SETDECLARE
TYPE nt_table_type IS TABLE OF NUMBER;
nt_table nt_table_type := nt_table_type(1,2,3,4,1);
v1 NUMBER := 1;
BEGIN
IF nt_table IS A SET THEN
dbms_output.put_line(‘嵌套表nt_table无重复值‘);
ELSE
dbms_output.put_line(‘嵌套表nt_table包含重复值‘);
END IF;
END;PL/SQL使用复合数据类型4(集合操作符、比较集合),布布扣,bubuko.com
原文:http://blog.csdn.net/com185272358/article/details/21739339