tab_to_string [错误]执行(37:13):ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小

时间:2019-06-28 20:53:05

标签: sql oracle

我从其他Q / A中找到了制表符值tab_to_string。希望这可以解决问题,但似乎有些不对。

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查询,输入值有时会起作用。当注释中包含大数据时,它会引发错误。

评论是varchar(1024) 最多可以有20条评论。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此查询在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

干杯!