我有一个带有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;
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;
答案 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个字节或字符