tab_to_string [Ошибка] Выполнение (37: 13): ORA-06502: PL / SQL: ошибка числа или значения: слишком маленький буфер символьной строки - PullRequest
0 голосов
/ 28 июня 2019

Я нашел tab_to_string в других Q / A для значений агрегации.надеюсь, что это решит проблему, но, похоже, что-то не так.

CREATE OR REPLACE TYPE FMF_VERIFY5.t_varchar2_tab AS TABLE OF VARCHAR2(32767);

CREATE OR REPLACE FUNCTION FMF_tab_to_string (p_varchar2_tab  IN  t_varchar2_tab,
                                          p_delimiter     IN  VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
  l_string     VARCHAR2(32767);
BEGIN
  FOR i IN p_varchar2_tab.FIRST .. p_varchar2_tab.LAST LOOP
    IF i != p_varchar2_tab.FIRST THEN
      l_string := l_string || p_delimiter;
    END IF;
    l_string := l_string || p_varchar2_tab(i);
  END LOOP;
  RETURN l_string;
END tab_to_string;
/

SELECT ID, tab_to_string(CAST(COLLECT(COMMENTS ORDER BY DATE DESC) AS t_varchar2_tab),'//') AS COMMENTS
FROM TABLE

Вышеупомянутый запрос SELECT время от времени работает на основе входного значения.похоже, что когда комментарий содержит большие данные, он выдает ошибку.

COMMENT - это varchar (1024), и может быть до 20 комментариев.

1 Ответ

0 голосов
/ 29 июня 2019

Вы можете попробовать этот запрос для получения комментария в clob и ограничить размер до 32767.

SELECT
    LENGTH(LIST),
    LIST
FROM
    (
        SELECT
            SUBSTR(RTRIM(XMLAGG(XMLELEMENT(E, COMMENT, ',').EXTRACT('//text()')).GETCLOBVAL(), ','), 1, 32767) AS LIST
        FROM
            MYTABLE
    );

db <> fiddle demo

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...