2013-05-01 38 views
0

我創建了一個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中?

回答

2

散裝收集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

相關問題