金仓数据库集合的嵌套使用

本文详细介绍了Oracle数据库中如何使用关联数组(AssociativeArray)、嵌套表(NestedTable)和Varray进行嵌套操作,包括嵌套关联数组、嵌套可变数组和嵌套嵌套表的示例和代码演示。
摘要由CSDN通过智能技术生成

关键字:

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;
/   

file

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;
/   

file

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;
/   

file

2.可变数组的嵌套使用

2.1. 可变数组嵌套关联数组

file

在下面的实例中,首先定义了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;
/   

file

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;
/

file

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;
/   

file

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;
/   

file

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;
/

file

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;
/

file 更多信息,参见https://help.kingbase.com.cn/v8/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值