Mat*_*sen 6 oracle json oracle12c
我有一个带有 CLOB 的表,其中存储了一个大的 JSON 有效负载。但是,我无法选择值大于 4000 字节的某些属性。
例如,以这样的 json 为例:
{
"foo": "some string smaller than 4k",
"bar": "some string larger than 4k"
}
Run Code Online (Sandbox Code Playgroud)
以下工作:
SELECT json_value(j, '$.foo' ERROR ON ERROR) FROM j;
Run Code Online (Sandbox Code Playgroud)
以下失败ORA-40478: output value too large (maximum:):
SELECT json_value(j, '$.bar' ERROR ON ERROR) FROM j;
Run Code Online (Sandbox Code Playgroud)
ORA-40478: 输出值太大(最大值:字符串)
原因:提供的 JavaScript 对象表示法 (JSON) 运算符生成的结果超出了 RETURN 子句中指定的最大长度。
行动:增加返回子句中数据类型的最大大小或在返回子句中使用CLOB或BLOB。
但是,使用该RETURNING子句也会失败,例如ORA-40444: JSON processing error:
SELECT json_value(j, '$.bar' RETURNING CLOB ERROR ON ERROR) FROM j;
Run Code Online (Sandbox Code Playgroud)
它在 PLSQL 期间也会失败
DECLARE
val CLOB;
BEGIN
SELECT json_value(j, '$.bar' RETURNING CLOB ERROR ON ERROR)
INTO val
FROM j
END;
Run Code Online (Sandbox Code Playgroud)
小智 4
默认情况下,Json_value 函数将返回 varchar2(4000),但如果添加指定 varchar2 大小的返回子句,则可以强制它返回更长的值。
在您的示例中,以下查询应该有效:
SELECT json_value(j, '$.bar' returning varchar2(32000) ERROR ON ERROR) FROM j;
Run Code Online (Sandbox Code Playgroud)
附言。在 Oracle 12c (SQL) 中,varchar2 限制为 4000 字节,除非将 MAX_STRING_SIZE 参数设置为 EXTENDED。
如果 MAX_STRING_SIZE = EXTENDED,则为 32767 个字节或字符