我想知道我在执行中做错了什么,我创建了一个包来构建动态查询,但当我测试特定表时,我将包生成的查询直接传递给
CLOB
变量。
上下文:此查询以 JSON 结构返回表值,当我执行时:
EXECUTE IMMEDIATE v_query
。这通常适用于其他表,但对于我正在测试的表,它会返回一个长度超过 33k 个字符的 JSON,这会返回此错误:ORA-40478: output value too large (maximum: 4000)
,但我使用像 CLOB
这样的变量,应该假设超过4000个。
当查询是 CLOB 时,我执行查询并将其传递给输出变量的方式是否有问题?因为
v_query
中生成的查询没有超出 VARCHAR2
的限制,唯一改变的是最后在 WHERE 子句中传递的“ROWID”,所以我想问题出在 return (这将是生成的 JSON)。
PL/SQL:
DECLARE
v_query CLOB;
o_return CLOB;
BEGIN
v_query := 'SELECT JSON_SERIALIZE(JSON_OBJECT(...
WHERE rowid = ''AAAgDXAAMAAAIL9AAN''';
EXECUTE IMMEDIATE v_query INTO o_return;
htp.p(o_return);
END;
v_query
中的查询已配置为返回CLOB
。类似这样的东西:
SELECT JSON_SERIALIZE( JSON_OBJECT(
'surname' : column_X,
'surname' : ( SELECT JSON_ARRAYAGG ( JSON_OBJECT(
'surname' : column_Y
) ABSENT ON NULL RETURNING CLOB) as data
FROM table_Y
WHERE column_Y = column_X), [...]
.
.-- rest of the query
.
[...]) RETURNING CLOB ) RETURNING CLOB PRETTY ) as data
FROM table_X
WHERE rowid = 'AAAgDXAAMAAAIL9AAN';
在 Oracle 中使用 JSON 对象存在一些限制。该问题可能是由代码中的 JSON 函数引起的,该函数必须处理超出最大大小的对象。
来自文档:
Oracle 数据库 JSON 限制
此处列出了与 Oracle 数据库中的 Oracle 支持 JSON 数据相关的限制。
除非另有说明,如果不遵守指定的限制,则会引发错误。
一般
JSON 对象或数组的嵌套级别数:最大 1000。
JSON 字段名称长度:最大 32767 字节。
SQL/JSON 函数
返回值长度:最大32767字节.
路径长度:最大4K字节。
路径步数:最大65535。
简化的 JSON 语法(点表示法)
路径长度:最大4K字节。
路径组件长度:最大 128 字节。
查询返回值:4K字节,最大(即使数据库参数max_string_size的值被扩展)。
JSON 搜索索引
字段名称长度:最大 255 字节。如果文档的字段名称超过 255 个字节,则可能无法完全为其建立索引。在这种情况下,数据库视图 CTX_USER_INDEX_ERRORS 中会记录错误。
更多相关信息 --> 在此处输入链接描述