关键字:
Associative Array、Nested Table、Varray
1.关联数组的嵌套使用
1.1.关联数组嵌套关联数组
嵌套在关联数组中的内层关联数组需要使用双重索引来访问嵌套关联数组。在下面的实例中,首先定义了两个类型:InnerAsociativeArray表示内层的关联数组类型和OuterAsociativeArray外层的关联数组的类型。然后,声明了一个嵌套的关联数组变量nesteArray,它由OuterAsociativeArray组成。在nesteArray初始化部分,使用了双重索引来访问嵌套关联数组,并为每个索引位置赋值一个字符串,通过nesteArray(1)(2),可以在嵌套关联数组中访问和检索具体的值。
\set SQLTERM /
DECLARE
TYPE InnerAsociativeArray IS TABLE OF VARCHAR2(100) INDEX BY INTEGER;
TYPE OuterAsociativeArray IS TABLE OF InnerAsociativeArray INDEX BY INTEGER;
nesteArray OuterAsociativeArray;
BEGIN
nesteArray(1)(1):='1';
nesteArray(1)(2):='2';
nesteArray(2)(1):='3';
nesteArray(2)(2):='4';
nesteArray(2)(3):='5';
DBMS_OUTPUT.PUT_LINE(nesteArray(1)(2));
END;
/
1.2.关联数组嵌套可变数组
--关联数组嵌套可变数组
\set SQLTERM /
DECLARE
TYPE InnerVarray IS VARRAY(5) OF NUMBER;
TYPE OuterAssocArray IS TABLE OF InnerVarray INDEX BY INTEGER;
nesteArray OuterAssocArray;
BEGIN
nesteArray(1):=InnerVarray(1,2,3);
nesteArray(2):=InnerVarray(4,5);
nesteArray(3):=InnerVarray(6,7,8,9);
DBMS_OUTPUT.PUT_LINE(nesteArray(1)(2));
DBMS_OUTPUT.PUT_LINE(nesteArray(2)(1));
DBMS_OUTPUT.PUT_LINE(nesteArray(3)(3));
END;
/
1.3.关联数组嵌套嵌套表
--关联数组嵌套嵌套表
\set SQLTERM /
DECLARE
TYPE nested_table_type IS TABLE OF VARCHAR2;
TYPE nested_aa_type IS TABLE OF nested_table_type INDEX BY VARCHAR2;
TYPE aa_type IS TABLE OF nested_aa_type INDEX BY VARCHAR2;
nested_table nested_table_type;
nested_aa nested_aa_type;
aa aa_type;
BEGIN
nested_table:=nested_table_type('1','2','3');
nested_aa('nested_table1'):=nested_table;
aa('nested_aa1'):=nested_aa;
DBMS_OUTPUT.PUT_LINE(aa('nested_aa1')('nested_table1')(2));
END;
/
2.可变数组的嵌套使用
2.1. 可变数组嵌套关联数组
在下面的实例中,首先定义了InnerAssocArray和OuterNestedTable两个类型。其中InnerAssocArray是一个关联数组类型,用于存储VARCHAR2类型的数据;OuterNestedTable是一个可变数组尅性,它的元素类型为InnerAssocArray。然后,创建了一个空的关联数组myInnerAssocArray和空的可变数组myOuterVarray组,并通过EXTEND方法扩展它的大小。将第一个关联数组myInnerAssocArray添加到可变数组myOuterVarray的第一位置,然后,重新初始化myInnerAssocArray,并添加数据。最后使用嵌套的循环遍历和打印嵌套关联数组中的数据。
--可变数组嵌套嵌套表
\set SQLTERM /
DECLARE
TYPE InnerAssocArray IS TABLE OF VARCHAR2 INDEX BY INTEGER;
TYPE OuterVarray IS VARRAY(5) OF InnerAssocArray;
myInnerAssocArray InnerAssocArray;
myOuterVarray OuterVarray;
BEGIN
myInnerAssocArray(1):='AEF';
myInnerAssocArray(2):='BCD';
myOuterVarray :=OuterVarray();
myOuterVarray.EXTEND;
myOuterVarray(1):=myInnerAssocArray;
myInnerAssocArray(1):='QAD';
myInnerAssocArray(2):='QAS';
myOuterVarray.EXTEND;
myOuterVarray(2):=myInnerAssocArray;
FOR i IN myOuterVarray.FIRST ..myOuterVarray.LAST LOOP
FOR j IN myOuterVarray(i).FIRST ..myOuterVarray(i).LAST LOOP
DBMS_OUTPUT.PUT_LINE('myOuterVarray('||i||')('||j||'):'||myOuterVarray(i)(j));
END LOOP;
END LOOP;
END;
/
2.2. 可变数组嵌套可变数组
--可变数组嵌套可变数组
\set SQLTERM /
DECLARE
TYPE InnerVarray IS VARRAY(5) OF NUMBER;
TYPE OuterArray IS VARRAY(3) OF InnerVarray;
nesteArray OuterArray;
BEGIN
nesteArray:=OuterArray(
InnerVarray(1,2,3),
InnerVarray(4,5),
InnerVarray(6,7,8,9)
);
DBMS_OUTPUT.PUT_LINE(nesteArray(1)(2));
DBMS_OUTPUT.PUT_LINE(nesteArray(2)(1));
DBMS_OUTPUT.PUT_LINE(nesteArray(3)(3));
END;
/
2.3. 可变数组嵌套嵌套表
--可变数组嵌套关联数组
\set SQLTERM /
DECLARE
TYPE InnerAssocArray IS TABLE OF VARCHAR2 INDEX BY INTEGER;
TYPE OuterVrray IS VARRAY(3) OF InnerAssocArray;
nestedArray OuterVrray;
BEGIN
nestedArray:=OuterVrray(
InnerAssocArray(1,'1'),
InnerAssocArray(2,'2',3,'3'),
InnerAssocArray(4,'4',5,'5',6,'6')
);
DBMS_OUTPUT.PUT_LINE(nestedArray(1)(1));
DBMS_OUTPUT.PUT_LINE(nestedArray(2)(3));
DBMS_OUTPUT.PUT_LINE(nestedArray(3)(6));
END;
/
3.嵌套表的嵌套使用
3.1. 嵌套表嵌套关联数组
--嵌套表嵌套关联数组
\set SQLTERM /
DECLARE
TYPE InnerAssocArray IS TABLE OF VARCHAR2 INDEX BY INTEGER;
TYPE OuterTable IS TABLE OF InnerAssocArray;
myInnerAssocArray InnerAssocArray;
myOuterTable OuterTable;
BEGIN
myInnerAssocArray(1):='AEF';
myInnerAssocArray(2):='BCD';
myOuterTable :=OuterTable();
myOuterTable.EXTEND;
myOuterTable(1):=myInnerAssocArray;
myInnerAssocArray(1):='QAD';
myInnerAssocArray(2):='QAS';
myOuterTable.EXTEND;
myOuterTable(2):=myInnerAssocArray;
FOR i IN myOuterTable.FIRST ..myOuterTable.LAST LOOP
FOR j IN myOuterTable(i).FIRST ..myOuterTable(i).LAST LOOP
DBMS_OUTPUT.PUT_LINE('myOuterTable('||i||')('||j||'):'||myOuterTable(i)(j));
END LOOP;
END LOOP;
END;
/
3.2. 嵌套表嵌套可变数组
--嵌套表嵌套可变数组
\set SQLTERM /
DECLARE
TYPE InnerVarray IS VARRAY(5) OF NUMBER;
TYPE OuterNestedTable IS TABLE OF InnerVarray;
nestedTable OuterNestedTable;
BEGIN
nestedTable:=OuterNestedTable(
InnerVarray(1,2,3),
InnerVarray(4,5),
InnerVarray(6,7,8)
);
DBMS_OUTPUT.PUT_LINE(nestedTable(1)(1));
DBMS_OUTPUT.PUT_LINE(nestedTable(2)(2));
DBMS_OUTPUT.PUT_LINE(nestedTable(3)(3));
END;
/
3.3. 嵌套表嵌套嵌套表
--嵌套表嵌套嵌套表
\set SQLTERM /
DECLARE
TYPE InnerNestedTable IS TABLE OF NUMBER;
TYPE OuterNestedTable IS TABLE OF InnerNestedTable;
nestedTable OuterNestedTable;
BEGIN
nestedTable:=OuterNestedTable(
InnerNestedTable(1,2,3),
InnerNestedTable(4,5),
InnerNestedTable(6,7,8)
);
DBMS_OUTPUT.PUT_LINE(nestedTable(1)(1));
DBMS_OUTPUT.PUT_LINE(nestedTable(2)(2));
DBMS_OUTPUT.PUT_LINE(nestedTable(3)(3));
END;
/