运行collect命令后我该怎么办?

时间:2013-07-24 14:17:36

标签: sql oracle casting oracle11g collect

Oracle Database 11g企业版11.2.0.2.0版 - 64位生产。

我有一个以下格式的表格。

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 个答案:

答案 0 :(得分:1)

尝试使用xmlagg方法:

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

Here is a sqlfiddle demo