DECLARE --定义一维VARRAY TYPE a1_varray_type IS VARRAY(10) OF INT; --定义二维VARRAY集合 TYPE na1_varray_type IS VARRAY(10) OF a1_varray_type; --初始化二维集合变量 nv1 na1_varray_type := na1_varray_type( a1_varray_type(58,100,102), a1_varray_type(55,6,73), a1_varray_type(2,4) ); BEGIN dbms_output.put_line(‘显示二维数组所有元素‘); FOR i IN 1..nv1.count LOOP FOR j IN 1..nv1(i).count LOOP dbms_output.put_line(‘nv1(‘ || i || ‘,‘ || j || ‘)=‘ || nv1(i)(j)); END LOOP; END LOOP; END;示例二:在PL/SQL块中使用多级嵌套表
DECLARE --定义一维嵌套表 TYPE a1_table_type IS TABLE OF INT; --定义二维嵌套表 TYPE na1_table_type IS TABLE OF a1_table_type; --初始化二维集合变量 nv1 na1_table_type := na1_table_type( a1_table_type(2,4), a1_table_type(5,73) ); BEGIN dbms_output.put_line(‘显示二维数组所有元素:‘); FOR i IN 1..nv1.count LOOP FOR j IN 1..nv1(i).count LOOP dbms_output.put_line(‘nv1(‘ || i || ‘,‘ || j || ‘)=‘ || nv1(i)(j)); END LOOP; END LOOP; END;
示例三:在PL/SQL块中使用多级索引表
在PL/SQL块中实现类似于多维数组的功能时,如果多维数组的元素个数没有限制,那么不仅可以使用多级嵌套表实现,也可以使用多级索引表实现。
DECLARE --定义一维table TYPE a1_table_type IS TABLE OF INT INDEX BY BINARY_INTEGER; --定义二维table集合 TYPE na1_table_type IS TABLE OF a1_table_type INDEX BY BINARY_INTEGER; nv1 na1_table_type; BEGIN --初始化二维table集合 nv1(1)(1) := 10; nv1(1)(2) := 5; nv1(2)(1) := 100; nv1(2)(2) := 50; --循环输出 dbms_output.put_line(‘显示二维数组所有元素‘); FOR i IN 1..nv1.count LOOP FOR j IN 1..nv1(i).count LOOP dbms_output.put_line(‘nv1(‘ || i || ‘,‘ || j || ‘)=‘ || nv1(i)(j)); END LOOP; END LOOP; END;
collection_name.method_name[(parameters)]注意,集合方法只能在PL/SQL语句中使用,而不能在SQL语句中调用。另外集合方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适用于索引表。DELETE该过程只适用于嵌套表和索引表,而不适用于VARRAY。
DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE; ename_table ename_table_type; BEGIN IF ename_table.EXISTS(1) THEN ename_table(1) := ‘SCOTT‘; ELSE dbms_output.put_line(‘必须初始化集合元素‘); END IF; END;2、COUNT
DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; BEGIN --只有索引表才不必集合初始化 ename_table(-5) := ‘张三‘; ename_table(1) := ‘李四‘; ename_table(5) := ‘王五‘; ename_table(10) := ‘赵六‘; dbms_output.put_line(‘集合元素总个数:‘ || ename_table.COUNT); END;3、LIMIT
DECLARE TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE; ename_table ename_table_type := ename_table_type(‘marray‘); BEGIN dbms_output.put_line(‘集合元素中的最大个数:‘ || ename_table.LIMIT); END;4、FIRST和LAST
FIRST方法用于返回集合变量第一个元素的下标,而LAST方法则用于返回集合变量最后一个元素的下标。 DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; BEGIN ename_table(-5) := ‘张三‘; ename_table(1) := ‘李四‘; ename_table(5) := ‘王五‘; ename_table(10) := ‘赵六‘; dbms_output.put_line(‘第一个元素下标:‘ || ename_table.FIRST); dbms_output.put_line(‘第一个元素:‘ || ename_table(ename_table.FIRST)); dbms_output.put_line(‘最后一个元素下标:‘ || ename_table.LAST); dbms_output.put_Line(‘最后一个元素:‘ || ename_table(ename_table.LAST)); END;5、PRIOR和NEXT
PRIOR方法用于返回当前集合元素的前一个元素的下标,而NEXT方法则用于返回当前集合元素的后一个元素的下标。 DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; BEGIN ename_table(-5) := ‘张三‘; ename_table(1) := ‘李四‘; ename_table(5) := ‘王五‘; ename_table(10) := ‘赵六‘; dbms_output.put_line(‘元素下标5的前一个元素下标:‘ || ename_table.PRIOR(5)); dbms_output.put_line(‘元素下标5的前一个元素:‘ || ename_table(ename_table.PRIOR(5))); dbms_output.put_line(‘元素下标5的后一个元素下标:‘ || ename_table.NEXT(5)); dbms_output.put_line(‘元素下标5的后一个元素:‘ || ename_table(ename_table.NEXT(5))); END;6、EXTEND
DECLARE TYPE ename_table_type IS VARRAY(20) OF VARCHAR2(20); ename_table ename_table_type; BEGIN ename_table := ename_table_type(‘mary‘); ename_table.EXTEND(5,1); dbms_output.put_line(‘元素总个数:‘ || ename_table.COUNT); dbms_output.put_line(‘元素输出:‘); FOR i IN 1..ename_table.COUNT LOOP dbms_output.put_line(‘ename_table(‘ || i || ‘)=‘ || ename_table(i)); END LOOP; END;7、TRIM
DECLARE TYPE ename_table_type IS VARRAY(20) OF VARCHAR2(20); ename_table ename_table_type; BEGIN ename_table := ename_table_type(‘A‘,‘A‘,‘A‘,‘A‘,‘A‘); ename_table.TRIM(2); dbms_output.put_line(‘元素总个数:‘ || ename_table.COUNT); END;8、DELETE
DECLARE TYPE ename_table_type IS TABLE OF emp.ename%TYPE INDEX BY BINARY_INTEGER; ename_table ename_table_type; BEGIN ename_table(-5) := ‘张三‘; ename_table(1) := ‘李四‘; ename_table(5) := ‘王五‘; ename_table(10) := ‘赵六‘; ename_table.DELETE(5); dbms_output.put_line(‘元素总个数:‘ || ename_table.COUNT); END;
PL/SQL_使用复合数据类型3(多级集合),布布扣,bubuko.com
原文:http://blog.csdn.net/com185272358/article/details/21739177