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、COUNTDECLARE 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、TRIMDECLARE 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