
在上周的分享中,我们介绍了集合类型中的变长数组和索引表,今天我们讲一讲剩下的几种跟集合有关的数据类型。
嵌套表
嵌套表和varray类型用法类似,主要区别在于嵌套表在使用时不用指定元素上限。
这里我们采用结合游标制造一个比较复杂的例子,我们先采用一个游标ename_cursor来存储job_id为21的员工姓名信息,然后通过遍历游标把对应的员工姓名存储到嵌套表中,相关代码如下:
DECLARE
--下面这句是嵌套表的声明,可以看到这里并不用指定元素上限
TYPE ename_array_type is table of dmhr.employee.employee_name%TYPE;
--定义一个游标
CURSOR ename_cursor is select employee_name from dmhr.employee where job_id=21;
--初始化嵌套表,此时嵌套表为空
ename_arrayename_array_type:=ename_array_type(); --初始化嵌套表
i number:=0;
BEGIN
for ename in ename_cursor
loop
i:=i+1;
--执行extend函数,为数组增加一个null元素
ename_array.EXTEND;
ename_array(i):=ename.employee_name;
print(ename.employee_name);
end loop;
--注意嵌套表下标是从1开始的,而不是0
for j in 1..ename_array.count()loop
print(ename_array(j));
end loop;
END;
/
执行结果如下,篇幅关系并没有截全。

数组类型
前文所述的三种集合类型用法跟oracle较类似,除此之外,在DM PL/SQL中,我们也可以使用直接声明的方式来使用数组类型,也就是array类型。跟大多数编程语言类型,DM PL/SQL中的数组类型可以使用静态或动态的方式定义,具体演示如下。
静态数组:
DECLARE
--TYPE 定义一维数组类型
TYPE Arr IS ARRAY VARCHAR[3];
a Arr;
BEGIN
FOR I IN1..3 LOOP
a[I] :=I*10;
PRINT a[I];
END LOOP;
END;
/

动态数组:
DECLARE
TYPE Arr IS ARRAY VARCHAR[];
a Arr;
BEGIN
a := NEW VARCHAR[4];--动态分配空间
FOR I IN 1..4 LOOP
a[I] :=I*4;
PRINT a[I];
END LOOP;
END;
/






