问题描述
我正在尝试使用像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原生支持?
选择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:
但不是json_object:
18c解决了这些问题。
同时,您可以使用扩展数据类型返回大于4,000字节的文档:
-首先应用 <补丁27521093: 在12.2.0.1.0之上的合并请求24693010 25481087的bug>
-启用扩展数据类型
-将json函数的返回子句设置为varchar2(32767):
MOS note 2354511.1包括更多详细信息。
你可以从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 value18c解决了这些问题。
同时,您可以使用扩展数据类型返回大于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)))
17316MOS note 2354511.1包括更多详细信息。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




