Конвертировать LISTAGG в XMLAGG Oracle - PullRequest
0 голосов
/ 23 мая 2018

У меня ниже 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

Но всякий раз, когда я запускаю его, он продолжает сбой с синтаксической ошибкой пропущенной запятой.Мой преобразованный запрос правильный или я делаю это неправильно?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Попробуйте следующий запрос как замену 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
0 голосов
/ 23 мая 2018

попробуйте этот запрос:

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;
...