【问题标题】:How to extract a json value greater than 4000 bytes with Oracle 12C JSON_VALUE?如何使用 Oracle 12C JSON_VALUE 提取大于 4000 字节的 json 值?
【发布时间】:2017-12-25 07:48:10
【问题描述】:

我有一个带有 CLOB 的表,其中存储了一个大的 JSON 有效负载。但是,我无法选择值大于 4000 字节的某些属性。

例如,取一个这样的json:

{
    "foo": "some string smaller than 4k",
    "bar": "some string larger than 4k"
}

以下作品:

SELECT json_value(j, '$.foo' ERROR ON ERROR) FROM j;

以下失败,ORA-40478: output value too large (maximum:)

SELECT json_value(j, '$.bar' ERROR ON ERROR) FROM j;

来自this 12CR1 documentation

ORA-40478: 输出值太大(最大值:字符串)

原因:提供的 JavaScript Object Notation (JSON) 运算符生成的结果超过了 RETURN 子句中指定的最大长度。

操作:增加 RETURNING 子句中数据类型的最大大小或在 RETURNING 子句中使用 CLOB 或 BLOB。

但是,使用RETURNING 子句也会失败,使用ORA-40444: JSON processing error

SELECT json_value(j, '$.bar' RETURNING CLOB ERROR ON ERROR) FROM j;

在 PLSQL 期间它也会失败

DECLARE
    val CLOB;
BEGIN
    SELECT json_value(j, '$.bar' RETURNING CLOB ERROR ON ERROR) 
        INTO val 
    FROM j
 END;

【问题讨论】:

  • json_value 在其定义中的第一个参数限制为 4000 个字符。你试过用 json_table 代替吗?

标签: json oracle oracle12c


【解决方案1】:

Json_value 函数默认会返回 varchar2(4000),但如果你添加指定 varchar2 大小的返回子句,你可以强制它返回更长的值。

在您的示例中,以下查询应该有效:

SELECT json_value(j, '$.bar'  returning varchar2(32000) ERROR ON ERROR) FROM j;

PS。在 Oracle 12c (SQL) 中,varchar2 被限制为 4000 字节,除非您将 MAX_STRING_SIZE 参数设置为 EXTENDED。

如果 MAX_STRING_SIZE = EXTENDED,则为 32767 个字节或字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多