我的嵌套集合类型是
NumGenus2 <- NumGenus[ grep(1, NumGenus$Number.in.Genus, invert = TRUE), ]
所以,有一个案例我正在使用循环中的值获取集合
TYPE Ty_Utils IS RECORD(
Utils_Master Ty_Util_Master,
Utils_Details Ty_Tb_Utils_Details);
我必须按照Ty_Utils.utils_details(k).seq_no:=2
Ty_Utils.utils_details(k).seq_no:=3
Ty_Utils.utils_details(k).seq_no:=1
按升序对上述集合的所有值进行排序,即Ty_Utils.utils_details
。部分seq_no
将为null。我应该把它们放在最后。
请帮忙
答案 0 :(得分:1)
这实际上取决于您的引用类型是如何创建的。如果Ty_Util_Master
和Ty_Tb_Utils_Details
是SQL类型,那么您可以执行此操作。
您尚未提供大部分架构的任何详细信息,因此本演示中的所有对象都是猜测。参考类型:
create or replace type Ty_Util_Master as object (
id number,
txn_date date
);
/
create or replace type Ty_Utils_Detail as object (
seq_no number,
amt number,
txn_type varchar2(3)
);
/
create or replace type Ty_Tb_Utils_Details as table of Ty_Utils_Detail;
/
示例包:
create or replace package tst as
type pl_Ty_Util is record (
header Ty_Util_Master
, details Ty_Tb_Utils_Details
);
procedure process_utils ( p_util in pl_Ty_Util);
end tst;
/
create or replace package body tst as
procedure process_utils
( p_util in pl_Ty_Util)
is
begin
dbms_output.put_line('id = '||p_util.header.id);
for idx in ( select t.*
from table(p_util.details) t
order by t.seq_no nulls last)
loop
dbms_output.put_line('#'||idx.seq_no ||' '|| idx.amt ||' '|| idx.txn_type );
end loop;
end process_utils;
end tst;
/
测试工具:
declare
l_utils tst.pl_Ty_Util;
begin
l_utils := tst.pl_Ty_Util(Ty_Util_Master(42, sysdate)
, Ty_Tb_Utils_Details(
Ty_Utils_Detail(3, 3000, 'D')
, Ty_Utils_Detail(null, 275, 'C')
, Ty_Utils_Detail(1, 5000, 'C')
, Ty_Utils_Detail(4, 150, 'D')
, Ty_Utils_Detail(2, 2000, 'C')
)
);
tst.process_utils(l_utils);
end;
/
如果你想测试它here is a LiveSQL demo (free Oracle TechNet account required)。