繁体   English   中英

将 LISTAGG 转换为 XMLAGG Oracle

[英]Convert LISTAGG to XMLAGG Oracle

我有一个下面的 SQL,我正在尝试将 LISTAGG 转换为 XMLAGG。 我的数据库版本是 12.1,因此 LISTAGG 不支持超过 4K 的字符。

原始查询:--

SELECT LISTAGG (se1.EMAIL, ', ')
WITHIN GROUP (ORDER BY se1.EMAIL)
AS listofsgs
FROM abc se1, xyz team , mno sne
                WHERE     team.employee_id = se1.employee_id
                      AND sne.non_employee_id = team.non_employee_id

转换后的查询:--

SELECT XMLAGG(XMLELEMENT(se1.EMAIL||',')).EXTRACT('//text()')  
WITHIN GROUP (ORDER BY se1.EMAIL)
AS listofsgs
FROM abc se1, xyz team , mno sne
   WHERE     team.employee_id = se1.employee_id
   AND sne.non_employee_id = team.non_employee_id

但是每当我运行它时,它都会因缺少逗号的语法错误而失败。 我转换后的查询是正确的还是我做错了?

尝试以下查询作为LISTAGG的替代品

SELECT RTRIM (
          XMLAGG (XMLELEMENT (e, se1.email || ',') ORDER BY se1.email).EXTRACT (
             '//text()'),
          ',')
          listofsgs
  FROM abc se1, xyz team, mno sne
 WHERE     team.employee_id = se1.employee_id
       AND sne.non_employee_id = team.non_employee_id

我遇到了同样的问题,下面为我工作:

Select RTRIM((XMLAGG(XMLELEMENT(e, se1.EMAIL || ',') ORDER BY se1.EMAIL).EXTRACT ('//text()')).getclobval(),',') listofsgs
FROM abc se1, xyz team , mno sne
   WHERE     team.employee_id = se1.employee_id
   AND sne.non_employee_id = team.non_employee_id

请注意:我添加 getclobval() 是因为我收到“ORA-19011:字符串缓冲区太小错误”。 如果您不需要它,您可以将其删除。

试试这个查询:

SELECT XMLAGG(XMLELEMENT(e,se1.EMAIL||',')).EXTRACT('//text()', ',')
    WITHIN GROUP (ORDER BY se1.EMAIL)
    AS listofsgs
    FROM abc se1, xyz team , mno sne
       WHERE     team.employee_id = se1.employee_id
       AND sne.non_employee_id = team.non_employee_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM