如何选择一个查询结果的阵列?

如何选择一个查询结果的阵列?

问题描述:

我创建了一个VARRAY类型:如何选择一个查询结果的阵列?

CREATE TYPE my_array AS varray(1024) OF VARCHAR2(512); 

我知道我可以从值列表中创建的my_array实例使用my_array()

SELECT my_array('foo', 'bar'); 

但是,有没有方法来创建一个实例从查询的结果?我想是这样的:

SELECT my_array(SELECT table_name FROM all_tables WHERE owner = 'SCOTT') 
    FROM dual; 

或者,做不到这一点,那返回my_array合计:

SELECT my_array_agg(table_name) FROM all_tables WHERE owner = 'SCOTT'; 

是该做的,能够在Oracle中?

散装收集PLSQL

declare 
arr my_array; 
begin 
SELECT table_name bulk collect into arr FROM all_tables WHERE owner = 'SCOTT'; 
end; 

select collect(table_name) from all_tables where owner = 'SCOTT'; 

,但你不能用那种在sqlplus集合做任何事情。

+0

幸运的是,我用[的DBI(https://metacpan.org/module/DBI)和甲骨文驱动程序知道(https://metacpan.org/module/DBD::Oracle# OBJECT-COLLECTION-DATA-TYPES)将集合转换为数组。让我不知道,但我可以定义一个列存储的'COLLECT()'结果呢?或者它必须是一个VARRAY? – theory 2013-05-01 16:05:12

+0

你尝试过铸造....从'选择投(收集(COL)为my_array)...'? – haki 2013-05-01 17:19:30

+0

是的,这工作正常。我的意思是不必创建一个类型,而只是通过返回的对象'收集()'作为列类型。这看起来不可行。 – theory 2013-05-02 16:00:21