暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL JSON ORA-40459异常

askTom 2018-08-08
1986

问题描述

我正在尝试使用像JSON_OBJECT和JSON_ARRAYAGG这样的JSON函数通过SQL生成JSON字符串。我们的表中有很多列比4000字节更多的数据,我试图解析并生成JSON字符串。每次运行它时,都会出现以下错误: “ORA-40459: 输出值太大 (实际: 4044,最大值: 4000)”。我试图弄清楚如何将大量数据解析为JSON字符串。

选择JSON_OBJECT (“行” 值JSON_ARRAYAGG (JSON_OBJECT (“id” 值资产.asset_id,“数据” 值JSON_ARRAY (
第1栏,
第2栏,
第3栏,
第4栏,
第5栏,
第6栏)

来自TEST_TABLE;

是否有另一种解决方案,从大量数据生成JSON在Oracle原生支持?

专家解答

12.2中的JSON生成函数具有有限的数据类型支持。

你可以从json_arrayagg返回一个clob:

select length ( json_arrayagg ( object_name ) )
from   all_objects;

ORA-40459: output value too large (actual: 4004, maximum: 4000)

select length ( json_arrayagg ( object_name returning clob ) )
from   all_objects;

LENGTH(JSON_ARRAYAGG(OBJECT_NAMERETURNINGCLOB))   
                                          2018592 


但不是json_object:

select json_object ( 
         'objects' value json_arrayagg ( object_name returning clob ) 
         returning clob
       )
from   all_objects;

SQL Error: ORA-40449: invalid data type for return value


18c解决了这些问题。

同时,您可以使用扩展数据类型返回大于4,000字节的文档:

-首先应用 <补丁27521093: 在12.2.0.1.0之上的合并请求24693010 25481087的bug>
-启用扩展数据类型
-将json函数的返回子句设置为varchar2(32767):

select length ( json_arrayagg ( object_name returning varchar2(32767) ) )
from   all_objects
where  rownum <= 1000;

LENGTH(JSON_ARRAYAGG(OBJECT_NAMERETURNINGVARCHAR2(32767)))   
                                                       17316


MOS note 2354511.1包括更多详细信息。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论