2013-07-24 1 views
0

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production.Как я могу продолжить выполнение команды 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"; 

Я не могу создать потому что у меня нет привилегий. В одном из других подобных вопросов кто-то предложил использовать сбор. Таким образом, используя это:

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