You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JSON_ARRAYAGG遇ORA-40478错误,如何不改返回类型解决?

解决Oracle JSON_ARRAYAGG ORA-40478错误及LOB对象转换问题
  • 首先明确:当聚合后的JSON长度超过4000时,无法继续使用默认的VARCHAR2返回类型——Oracle的VARCHAR2在标准配置下最大长度为4000,超过这个阈值必然触发ORA-40478错误,没有绕过这个限制的常规办法(全局修改MAX_STRING_SIZE为EXTENDED属于非常规操作,会影响整个数据库,不推荐)。

  • 你遇到的LOB对象问题,本质是客户端没有读取LOB的内容,而非RETURNING CLOB本身的问题。以Python的oracledb驱动为例,只需调用LOB对象的read()方法即可获取标准JSON字符串:

    cursor.execute("SELECT JSON_ARRAYAGG(name RETURNING CLOB) AS name FROM admin_users")
    row = cursor.fetchone()
    json_result = row[0].read()
    # 此时json_result就是可直接使用的JSON字符串
    
  • 如果硬要“不修改返回类型”,只能通过限制聚合结果的长度来实现,比如:

    • 添加WHERE条件减少参与聚合的用户数量
    • 用SUBSTR(name, 1, N)截断每个用户名的长度
      但这种方式属于治标不治本,仅适用于数据量极小的场景,不建议在生产环境使用。

内容的提问来源于stack exchange,提问作者user971741

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:37:03