oracle table类型使用,Oracle Table类型集合变量的排序问题

楼上给我发的pm, 因为是讨论技术问题,公开在这里答复:

Naldonado   2014-3-25 23:48

关于你在“Oracle Table类型集合变量的排序问题”的帖子

http://www.itpub.net/thread-1852275-1-1.html

版主您好,这个帖子的8楼,是我按你的思路写的sql。但是我有个疑问,好像object 类型的嵌套表,我就没法select * bulk collect into 。非得我重新定义一个record类型的嵌套表。

菜单

Naldonado   2014-3-25 23:49

这是怎么回事?我刚开始还想用我之前的类型,狂报“没有足够的值”

菜单

Naldonado   2014-3-25 23:49

比如这么写就不行。declare

-- type t_test_rec is record(id  number, name varchar2(20));

type t_test_tbl2 is table of t_test_obj;

L_TEST_TBL2  T_TEST_TBL2;

begin

select * bulk collect into l_test_tbl2 from table(return_nest_table()) order by name;

dbms_output.put_line('新的顺序:');

for i in 1..l_test_tbl2.count loop

dbms_output.put_line(l_test_tbl2(i).id||'-'||l_test_tbl2(i).name);

end loop;

END;

答复:

因为l_test_tbl2是基于对象类型的集合,它的每个元素都是一个object而不是一个记录。SELECT * 可以构造记录,但是要构造对象就必须调用其构建函数:

declare

type t_test_tbl2 is table of t_test_obj;

L_TEST_TBL2  T_TEST_TBL2;

begin

select t_test_obj(id,name)

bulk collect

into l_test_tbl2

from table(return_nest_table()) order by name;

dbms_output.put_line('新的顺序:');

for i in 1..l_test_tbl2.count loop

dbms_output.put_line(l_test_tbl2(i).id||'-'||l_test_tbl2(i).name);

end loop;

END;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值