如果您想将订单保留为您的列表,您可以执行以下操作:
SQL> create type user_va as varray(1000) of number;
2 /
Type created.
SQL> with users as (select /*+ cardinality(a, 10) */ rownum r, a.column_value user_id
2 from table(user_va(11, 0, 19, 5)) a)
3 select d.user_id, d.username
4 from dba_users d
5 inner join users u
6 on u.user_id = d.user_id
7 order by u.r
8 /
USER_ID USERNAME
---------- ------------------------------
11 OUTLN
0 SYS
19 DIP
5 SYSTEM
即我们将元素放入一个可变数组并在合并集合之前分配一个rownum。然后我们可以通过它r
来维护我们的列表的顺序。提示只是告诉优化器cardinality
数组中有多少行(不必死在,只是在球场上..因为没有这个,它将假设 8k 行并且可能更喜欢完全扫描而不是索引方法)
如果您没有权限来创建类型,而这只是一些临时的事情,那么有一些公共的:
select owner, type_name, upper_bound max_elements, length max_size, elem_type_name
from all_Coll_types
where coll_type = 'VARYING ARRAY'
and elem_type_name in ('INTEGER', 'NUMBER');