【问题标题】:Combine multiple clob rows into one将多个 clob 行合并为一个
【发布时间】:2019-07-01 22:38:48
【问题描述】:

我有一个有 2 个字段的表格:

1) id - 编号

2) 描述 - clob

该表有多个对应一个特定 ID 的行。我想使用该表创建另一个表,该表将clob 行组合成一个特定ID。我正在尝试使用下面的 sql 来组合行 -

    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 错误。有什么办法可以解决这个问题吗?

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

【问题讨论】:

标签: oracle plsql


【解决方案1】:

这里的错误描述和操作是:

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

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

操作:选择另一个值并重试操作。

但是,我们可以跳过连接后大于 30K 的记录。意味着我们可以显示“连接中的错误”而不是实际的连接,因为无论如何这是不可能的。

尝试关注。它应该适合你。

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;

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

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

干杯!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 2014-06-19
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多