我试图通过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
型
有没有一种方法可以在不改变返回类型的情况下修复输出值错误?
1条答案
按热度按时间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示例。