,如果你想保持順序的列表,你可以做這樣的事情:
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
即我們把元素融入一個VARRAY並分配之前合併集的ROWNUM。那麼我們可以通過r
來維持我們在列表中的順序。 cardinality
提示只是告訴優化器在數組中有多少行(不必死心,只是在球場......沒有這個,它會假設8k行,可能更喜歡對索引方法進行全面掃描)
如果你沒有PRIVS創建一個類型,這只是一些即興的東西,有一些公共的:
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');
[保留從'IN'子句的順序]的可能的重複(http://stackoverflow.com/questions/14139931/keep-order-from-in-clause) – 2013-02-26 13:59:37
這些問題應該合併:)這裏的一些答案是與那裏不同。 – 2013-02-26 14:58:28