Ошибка вызова функции listagg ORA-01489: слишком большой результат конкатенации строк - PullRequest
1 голос
/ 10 апреля 2020

Я использую listagg после cte в сохраненном pro c. Однако возвращается ошибка «ORA-01489: результат объединения строк слишком длинный». Ниже моя хранимая процедура.

CREATE OR REPLACE PROCEDURE sp_market
IS
    Names VARCHAR2(32767);
BEGIN
    WITH CTE(sqql) As 
    (
      SELECT   field_name sqql FROM   pld_medicare_config  
    )  
    SELECT listagg(sqql, ' UNION ALL ') within GROUP (ORDER BY 1) into Names   from CTE;      
END sp_market;

В запросе на выбор field_name возвращает длинные тексты. Я считаю, что это потому, что listagg не может обрабатывать длинные символы, что является результатом оператора select. Как обойти эту проблему?

1 Ответ

3 голосов
/ 10 апреля 2020

Попробуйте XMLAGG вместо, например

with cte as (select id, field_name sqql from pld_medicare_config)
select rtrim (
          xmlagg (xmlelement (e, sqql || ', ') order by null).extract (
             '//text()'),
          ', ')
  into names
  from cte;
...