Oracle 10g复合数据类型pl/sql集合学习六——索引表、嵌套表、变长数组

来源:互联网 发布:windows内核 编辑:程序博客网 时间:2024/05/21 03:54
--Oracle 10g复合数据类型pl/sql集合,集合又可以分为索引表、嵌套表、变长数组
--1、索引表(下标没有长度限制,且可以为负值)
--在9i前,定义索引表时,只能使用binary_integer和pls_integer作为下标的数据类型,
--但是在9i后,下标数据类型还可以使用varchar2
declaretype area_table_type is table of numberindex by varchar2(10);area_table area_table_type;beginarea_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,没有长度限制)--注意:使用嵌套表变量时,必须使用其构造方法初始化declaretype 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 communitytypewhere 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');beginselect name into ename_table(1) from communitytypewhere 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));begindbms_output.put_line('显示二维数组所有元素:');for i in 1..variable_varray.count loopfor j in 1..variable_varray(i).count loopdbms_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
--多级嵌套表
declaretype 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));begindbms_output.put_line('显示二维嵌套表的所有元素:');for i in 1..nvl.count loopfor j in 1..nvl(i).count loopdbms_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
--多级索引表
declaretype al_table_type is table of intindex by binary_integer;type nal_table_type is table of al_table_typeindex by binary_integer;nvl nal_table_type;--初始化beginnvl(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 loopfor j in 1..nvl(i).count loopdbms_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
0 0