【发布时间】: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;
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 代替吗?