[英]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.