这可能看起来很简单,但我在文档中找不到答案。
与嵌套表一样,我们可以将TABLE()
与COLUMN_VALUE
伪列用于varrays。
create or replace type NUMBER_ARRAY as VARRAY(10) of NUMBER;
create table TAB_WITH_ARRAY(
ID NUMBER,
VALS NUMBER_ARRAY)
insert into TAB_WITH_ARRAY
select 1, NUMBER_ARRAY(1,2)
from dual
union all
select 2, NUMBER_ARRAY(1,2,3,4,5)
from dual
select t.id, c.column_value
from TAB_WITH_ARRAY t,
table(t.vals) c
但是,与嵌套表不同,VARRAY
是有序集合类型,我想保留该顺序。有没有办法不仅获取值而且还获取SQL中每个元素的索引?
是的,在我的测试中,输出的顺序是正确的,我可以使用ROW_NUMBER
和我的主表的PARTITION BY
主键来生成索引,但经验教会我不依赖于排序,除非它是手动指定的。
那么是否有内置的方法来访问数组中元素的索引?
答案 0 :(得分:1)
使用ROW_NUMBER()
分析函数:
SELECT t.id,
c.COLUMN_VALUE,
ROW_NUMBER() OVER ( PARTITION BY t.ROWID ORDER BY ROWNUM ) AS idx
FROM TAB_WITH_ARRAY t
CROSS JOIN
TABLE( t.vals ) c