oracle数据复杂类型(二)

4.oracle嵌套表
嵌套表和前面索引表相类似,有些较小的差别(嵌套表的下标是从1开始的)
declare
type sal_table is table of emp.sal%type; -----定义一个嵌套表类型 这里没有index by
v_sal_table sal_table;

begin
v_sal_table:=sal_table(1,3,5,6,2,24,2345,234,6567); ----初始化所定义的sal_table类型的变量(嵌套表的变量必须被初始化,否则报错);
dbms_output.put_line(v_sal_table(1)); [b] -----这里的下标从1开始[/b]
end;



5.嵌套表的使用

---创建一个嵌套表类型,当然这个表类型可以使多列的,在这里就用单列的进行演示了
create type booklist is table of varchar( 20 );---这个在执行后,oracle中就会生成一种类型


---建立一个表
create table bookClass
(
id varchar (20 ),
name varchar (20 ),
v_booklist booklist ---类型为前面创建的嵌套表类型
) nested table v_booklist store as booklist_tab;
--对嵌套表列进行指定, booklist_tab这个可以为任意一个名字,这个名字就是嵌套表的名字


---插入一条记录
insert into bookclass values( '2' ,'美术类' ,booklist( '素描', '油彩' ,'计算机作图' ))



----遍历显示嵌套表中的记录
declare
booklist_tab booklist;
begin
select v_booklist into booklist_tab from bookclass where rownum =1 ;
for i in booklist_tab.first..booklist_tab.last loop
dbms_output.put_line(booklist_tab(i));
end loop ;
end ;


----修改嵌套表
  update   bookclass b set b.v_booklist = booklist('c#' , '.net', 'c++' ) where rownum = '1';



6.可变数组 使用方法
declare
type ename is varray(5) of varchar(20); ---定义一个可变数组类型 其最大长度为5
v_ename ename:=ename('sdfs','fsdf','sfdsdf'); ------初始化三个元素,这里初始化过几个,下面就只能使用几个
begin
select t.ename into v_ename(3) from emp t where rownum=1;
dbms_output.put_line(v_ename(3));
end;


7.集合的一些函数用法

declare
type ename is varray( 5 ) of varchar( 20 );
v_ename ename:=ename( 'sdfs' ,'fsdf' , 'sfdsdf');
begin
if v_ename.exists(1 ) then ---exists(n)检查第n个元素是否存在
dbms_output.put_line( 'have' );
dbms_output.put_line(v_ename.count); ---count 统计一共有多少个元素
dbms_output.put_line(v_ename.limit); ---limit 统计最多有多少个元素
dbms_output.put_line(v_ename.prior( 2 )); ---prior(n)返回第n个元素的前一个元素的下标
dbms_output.put_line(v_ename.next( 2 )); ---next(n)返回第n个元素的后一个元素的下标
[b] /*******************************************************
这些方法包括可变数组,索引表,嵌套表都支持,
另外索引表,嵌套表 还支持delete方法(delete,delete(n),delete(n,m)),
需要注意的是delete以后, 未删除的元素的下标不会变化,delete只是把所要删除的元素质空
************************ ********************************/[/b]
dbms_output.put_line(v_ename( 3 ));
else
dbms_output.put_line( 'no' );
end if ;
end ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值