如何使用Oracle 12C JSON_VALUE提取大于4000字节的json值?

时间:2017-07-19 20:48:04

标签: json oracle oracle12c

我有一个带有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;

1 个答案:

答案 0 :(得分:1)

默认情况下,Json_value函数将返回varchar2(4000),但是如果您添加具有指定varchar2大小的returning子句,则可以强制其返回更长的值。

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

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

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

  

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