2013-07-24 43 views
0

Oracle數據庫11g企業版版本11.2.0.2.0 - 64位生產。運行collect命令後應該如何繼續?

我有一個表格,格式如下。

Number User Value 
------------------- 
1  A  25 
1  B  28 
2  C  30 
2  D  35 

這就是我想要的:

Number User Value 
------------------- 
1  A,B 25,28 
2  C,D 30,35 

我試圖用一個LISTAGG,但它給了我ORA-01489: result of string concatenation is too long.

這是LISTAGG命令:

SELECT "Number", 
     LISTAGG ("user", ', ') WITHIN GROUP (ORDER BY "user") "user", 
     LISTAGG ("value", ', ') WITHIN GROUP (ORDER BY "user") VALUE 
    FROM table 
GROUP BY "Number"; 

我不能創建鍵入,因爲我沒有特權。在其他類似問題之一中,有人建議使用collect。所以使用這個:

SELECT number, CAST (COLLECT (USER) AS SYS.DBMSOUTPUT_LINESARRAY) 
    FROM emp 
GROUP BY number; 

我不知道該從哪裏出發。當我運行這個查詢時,我得到這個列:

CAST(COLLECT(USER)ASSYS 
----------------------- 
COLLECTION 
COLLECTION 
COLLECTION 

正如你可以看到我的sql知識是非常小的。任何幫助將非常感激!

回答

1

嘗試使用XMLAGG方法:

rtrim(xmlagg(xmlelement(e, name1 || ',')).extract('//text()').getclobval(), ',') 

Here is a sqlfiddle demo

相關問題