如何选择一个查询结果的阵列?
问题描述:
我创建了一个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集合做任何事情。
幸运的是,我用[的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
你尝试过铸造....从'选择投(收集(COL)为my_array)...'? – haki 2013-05-01 17:19:30
是的,这工作正常。我的意思是不必创建一个类型,而只是通过返回的对象'收集()'作为列类型。这看起来不可行。 – theory 2013-05-02 16:00:21