【问题标题】:How should I proceed after running the collect command?运行 collect 命令后应该如何处理?
【发布时间】:2013-07-24 14:17:35
【问题描述】:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production。

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

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 知识非常少。任何帮助将不胜感激!

【问题讨论】:

    标签: sql oracle casting oracle11g collect


    【解决方案1】:

    尝试使用 xmlagg 方法:

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

    Here is a sqlfiddle demo

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 2016-04-20
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2019-09-30
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多