oracle 两层table of,ORACLE中嵌套表的基本知识

create or replace type rss_obj as object( --基础类型

seed_id varchar2(10),

seed_name varchar2(100),

url varchar2(100)

);

create or replace type rss_tab is table of rss_obj; --嵌套表

declare

v_tab rss_tab := rss_tab(

rss_obj('sid_1' ,

'wEB:=1' ,

'' ),

rss_obj('sid_2' ,

'wEB:=2' ,

''),

rss_obj('sid_3',

'wEB:=3' ,

'' )

);

--创建打印嵌套表功能的存储过程:

procedure p_print(tab in rss_tab)is

begin

dbms_output.put_line('tab.first:='||tab.first ||'-----------------------'|| 'tab.last:=' || tab.last);

if tab.count>0 then

for i in tab.first..tab.last loop

dbms_output.put_line('[procedure]SEEDID:='||tab(i).seed_id);

dbms_output.put_line('[procedure]SEEDNAME:='||tab(i).seed_name);

dbms_output.put_line('[procedure]URL:='||tab(i).url);

dbms_output.put_line('----------------------------------[procedure]------------------&gt>');

end loop;

dbms_output.put_line('Count:=' || tab.count);

dbms_output.put_line('Last:=' || tab.last);

dbms_output.put_line('----------------------------------END [procedure]------------------&gt>');

else

dbms_output.put_line('the count is:=' || tab.count || ' Canot be deleted');

end if;

end;

--方法,实现同样打印嵌套表,使用NEXT函数

function f_print(tab in rss_tab) return boolean is

v_index number:=tab.first;

begin

if v_index<=tab.last then

while v_index<=tab.last loop

dbms_output.put_line('[Function]SEEDID:='||tab(v_index).seed_id);

dbms_output.put_line('[Function]SEEDNAME:='||tab(v_index).seed_name);

dbms_output.put_line('[Function]URL:='||tab(v_index).url);

dbms_output.put_line('----------------------------------[Function]------------------&gt>');

v_index:=tab.next(v_index);

end loop;

dbms_output.put_line('----------------------------------END [Function]------------------&gt>');

return true;

else

dbms_output.put_line('----------------------------------print error the tab.count:='||tab.count||'------------------&gt>');

return false;

end if;

end;

--程序主体

begin

p_print(v_tab);

v_tab.delete(1);

dbms_output.put_line('----------------------------------Now delete no:1------------------&gt>');

if f_print(v_tab) then dbms_output.put_line('----------------------------------------------------&gt>');end if;

--extend();

--trim();

--v_tab.trim();--trim()在末尾删除1个元素

--v_tab.trim(2); --trim(n)在末尾删除n个元素

--dbms_output.put_line(v_tab(20).seed_id);

/**异常:

SQLCODE1:-6533

SQLCODE1:ORA-06533: 下标超出数量

*/

v_tab.trim(); --删除最后一个元素

p_print(v_tab);

/* tab.first:=2-----------------------tab.last:=2

以为上面应经使用v_tab.delete(1)所以只打印2号元素

[procedure]SEEDID:=sid_2

[procedure]SEEDNAME:=wEB:=2

[procedure]URL:=*/

v_tab.extend(30);

--扩大嵌套表

dbms_output.put_line(v_tab(20).seed_id);--不报异常,不打印,未赋值为空字段

EXCEPTION

WHEN NO_DATA_FOUND THEN --NO_DATA_FOUND 没有数据异常

dbms_output.put_line('SQLCODE0:' || SQLCODE);--SQLCODE 错误代码

dbms_output.put_line('SQLCODE0:' || SQLERRM);--SQLERRM 错误的描述信息

WHEN OTHERS THEN

dbms_output.put_line('SQLCODE1:' || SQLCODE);

dbms_output.put_line('SQLCODE1:' || SQLERRM);

end;[@more@]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值