type moduleName is table of t_module.name%type index by binary_integer;
(2)元素赋值
示例代码如下:
declare
type NameArray
is table of varchar(20) index by binary_integer; /*定义联合数组NameArrow*/
na NameArray; /*声明联合数组NameArrow的一个变量*/
begin
na(1) := 'Hello'; /*给联合数组赋值*/
na(2) := 'World'; /*给联合数组赋值*/
na(5) := 'Oracle'; /*给联合数组赋值*/
dbms_output.put_line(na(1) || na(2));
end;
type typeName is table of arrayType [not null]
嵌套表的声明与联合数组的唯一不同是没有index by binary_integer子句。
(1)嵌套表的初始化
嵌套表的初始化和联合数组的初始化是不同的。在声明了联合数组之后,再声明一个联合数组对应的变量,如果此时没有给该变量赋值,那么该变量对应的联合数组就是一个空的,在以后的语句中还可以给该联合数组添加元素;而如果在声明了嵌套表变量时没有初始化,则该嵌套表将自动初始化为null,并且是只读的。如果在后续代码中继续向该嵌套表中添加元素,就会报错,但是可以修改已经存在的元素的值。
以下是一个嵌套表的初始化示例:
declare
type NameArray is table of varchar(20);
na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu'); /*在声明的时候即初始化该嵌套表*/
begin
for nameIndex in 1..3 loop
dbms_output.put_line(na(nameIndex));
end loop;
end;
(2)元素序列
嵌套表与联合数组十分相似,只是嵌套表在结构上是有序的,而联合数组是无序的。嵌套表元素的index是从1开始递增的。
3、可变数组
先来看可变数组的语法格式:
type typeName is varray | varying array(maximunSize) of arrayType [not null]
maximunSize是指可变数组的最大值,arrayType表示数组元素的类型。
可变数组的可变是指当定义了数组的最大容量后,数组元素的个数可在这个范围内进行变动。
与嵌套表一样,可变数组也需要初始化,在初始化后也只能修改已经存在的元素值,初始化时赋值的数量必须不超过最大容量。
以下是一段示例代码:
declare
type NameArray is varray(10) of varchar(20);
na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu');
begin
for nameIndex in 1..3 loop
dbms_output.put_line(na(nameIndex));
end loop;
end;