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

--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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值