oracle ORA-40478:输出值太大(最大值:4000),同时使用JSON_ARRAYAGG

wixjitnu  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(590)

我试图通过JSON_ARRAYAGG从Oracle数据库中获取JSON形式的查询输出。

#   SELECT name AS name FROM admin_users
SELECT JSON_ARRAYAGG(name) AS name FROM admin_users

字符串
但是,上面给了我:

ORA-40478: output value too large (maximum: 4000)


使用RETURNING CLOB解决了这个问题,但它返回(<oracledb.LOB object at 0x0000021F5DA12C10>,)而不是JSON。

SELECT JSON_ARRAYAGG(name RETURNING CLOB) AS name FROM admin_users


有没有一种方法可以在不改变返回类型的情况下修复输出值错误?

jvidinwx

jvidinwx1#

JSON_ARRAYAGG将默认返回VARCHAR2,而VARCHAR2限制为4000个字符,因此您可以:
1.返回一个VARCHAR2,如果输出超过4000个字符,那么你会得到一个异常;或者是

  • 使用RETURNING CLOB,这将允许您拥有超过4000个字符,然后您使用以下命令从CLOB读取值:
  • clob_variable.read()
  • 设置oracledb.defaults.fetch_lobs = False,以便“小于1GB的CLOB和BLOB可以直接从数据库中作为字符串和字节进行查询。”

正如@ChristopherJones在评论中指出的那样,文档中有一个JSON示例。

相关问题