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]------------------>>');
end loop;
dbms_output.put_line('Count:=' || tab.count);
dbms_output.put_line('Last:=' || tab.last);
dbms_output.put_line('----------------------------------END [procedure]------------------>>');
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]------------------>>');
v_index:=tab.next(v_index);
end loop;
dbms_output.put_line('----------------------------------END [Function]------------------>>');
return true;
else
dbms_output.put_line('----------------------------------print error the tab.count:='||tab.count||'------------------>>');
return false;
end if;
end;
--程序主体
begin
p_print(v_tab);
v_tab.delete(1);
dbms_output.put_line('----------------------------------Now delete no:1------------------>>');
if f_print(v_tab) then dbms_output.put_line('---------------------------------------------------->>');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@]