--Oracle 10g复合数据类型pl/sql集合,集合又可以分为索引表、嵌套表、变长数组
--1、索引表(下标没有长度限制,且可以为负值)
--在9i前,定义索引表时,只能使用binary_integer和pls_integer作为下标的数据类型,
--但是在9i后,下标数据类型还可以使用varchar2
declare
type area_table_type is table of number
index by varchar2(10);
area_table area_table_type;
begin
area_table('北京'):=1;
area_table('上海'):=1;
area_table('广州'):=1;
dbms_output.put_line('第一个元素:'||area_table.first);
dbms_output.put_line('最后一个元素:'||area_table.last);
dbms_output.put_line('第n个元素:'||area_table('北京'));
end;
第一个元素:北京
最后一个元素:上海
第n个元素:1
--2、嵌套表(起始为1,没有长度限制)
--注意:使用嵌套表变量时,必须使用其构造方法初始化
declare
type community_type_name is table of communitytype.name%type;
comtype_name community_type_name;
begin
--使用构造方法初始化
comtype_name:=community_type_name('初始化值');
dbms_output.put_line('赋值前:'||comtype_name(1));
select name into comtype_name(1)
from communitytype
where community_type_id = 'ebook';
dbms_output.put_line('赋值后:'||comtype_name(1));
end;
--3、变长数组(元素下标从1开始,且有最大值)
--注意:当使用varray元素时,必须要使用其构造方法初始化varray元素
declare
type ename_table_type is varray(20) of communitytype.name%type;
ename_table ename_table_type:=ename_table_type('ebook');
begin
select name into ename_table(1) from communitytype
where community_type_id = 'ebook';
dbms_output.put_line('资源库名称:'||ename_table(1));
end;
--二维变长数组
declare
--一维数组
type first_varray_type is varray(10) of int;
--二维数组
type second_varray_type is varray(10) of first_varray_type;
--初始化
variable_varray second_varray_type:=second_varray_type(
first_varray_type(34,23,53,34),
first_varray_type(23,67,95),
first_varray_type(9,4)
);
begin
dbms_output.put_line('显示二维数组所有元素:');
for i in 1..variable_varray.count loop
for j in 1..variable_varray(i).count loop
dbms_output.put_line('variable_varray('||i||','||j||')='||variable_varray(i)(j));
end loop;
end loop;
end;
显示二维数组所有元素:
variable_varray(1,1)=34
variable_varray(1,2)=23
variable_varray(1,3)=53
variable_varray(1,4)=34
variable_varray(2,1)=23
variable_varray(2,2)=67
variable_varray(2,3)=95
variable_varray(3,1)=9
variable_varray(3,2)=4
--多级嵌套表
declare
type al_table_type is table of int;
type nal_table_type is table of al_table_type;
--初始化
nvl nal_table_type:=nal_table_type(
al_table_type(2,4),
al_table_type(5,73)
);
begin
dbms_output.put_line('显示二维嵌套表的所有元素:');
for i in 1..nvl.count loop
for j in 1..nvl(i).count loop
dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j));
end loop;
end loop;
end;
显示二维嵌套表的所有元素:
nvl(1,1)=2
nvl(1,2)=4
nvl(2,1)=5
nvl(2,2)=73
--多级索引表
declare
type al_table_type is table of int
index by binary_integer;
type nal_table_type is table of al_table_type
index by binary_integer;
nvl nal_table_type;
--初始化
begin
nvl(1)(1):=10;
nvl(1)(2):=5;
nvl(2)(1):=100;
nvl(2)(2):=50;
dbms_output.put_line('显示二维索引表的所有元素:');
for i in 1..nvl.count loop
for j in 1..nvl(i).count loop
dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j));
end loop;
end loop;
end;
显示二维索引表的所有元素:
nvl(1,1)=10
nvl(1,2)=5
nvl(2,1)=100
nvl(2,2)=50