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 OF
DECLARE 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 SET
DECLARE 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