将多个Clob行合并为一个

时间:2019-07-01 22:38:48

标签: oracle plsql

我有一个包含2个字段的表:

1) id -数字

2)说明-克隆

此表有多个行用于一个特定的ID。我想使用此表创建另一个表,该表将List<List<? super T>>行合并为一个特定ID。我正在尝试使用下面的sql来合并行-

clob

但这给我 SELECT id, rtrim(xmlagg(xmlelement(e, description, CHR (10) || CHR (10) ).extract('//text()') order by rowid).GetClobVal(),chr(10)||chr(10)) description2 FROM table a GROUP BY id 错误。有解决此问题的解决方法吗?

  

ORA-22813:操作数超出系统限制

1 个答案:

答案 0 :(得分:0)

错误的描述和操作如下:

  

ORA-22813 :操作数超出系统限制。

     

原因:对象或集合的值太大。在SORT上下文中,值的大小可能已超过30k,或者大小可能是   对于可用内存太大。

     

操作:选择另一个值,然后重试该操作。

但是,我们可以跳过连接后大于30K的那些记录。意思是我们可以显示“ ERROR IN CONCATENATION”,而不是实际的串联,因为这是不可能的。

尝试以下。它应该为您工作。

SELECT
    ID,
    CASE
        WHEN SUM((DBMS_LOB.GETLENGTH("DESCRIPTION"))) / 1024 < 30 
        THEN 
        RTRIM(XMLAGG(XMLELEMENT(E, DESCRIPTION, CHR(10)
        || CHR(10)).EXTRACT('//text()')  ORDER BY
                ROWID
        ).GETCLOBVAL(), CHR(10)
                        || CHR(10))
        ELSE TO_CLOB('ERROR IN CONCATENATION')
    END AS DESCRIPTION2
FROM
    TABLEA
GROUP BY
    ID;

这是功能有限的解决方法。

考虑到可能对您有用的信息,发布了答案。

干杯!