返回 json_table 中的子句或跳过错误?

问题描述 投票:0回答:1

我想将本地 json clob 变量转换并插入到这样的表中:

insert into IMP_JSON
select json_name, json_value
from json_table (
    l_clob format json,
    '$[*]' error on error columns (
       json_name          varchar2(32)     path '$.name'          null on empty,
       json_value         varchar2(32)     path '$.value'         null on empty
    )
)

使用此代码,我收到一条错误消息

提供的 JavaScript 对象表示法 (JSON) 运算符生成的结果超出了 RETURN 子句中指定的最大长度。增加 RETURNING 子句中数据类型的最大大小或在 RETURNING 子句中使用 CLOB 或 BLOB。

我找不到如何在

RETURNING
中包含
json_table
子句,但如果我跳过
error on error
并运行该过程,生成的表似乎完整且没有被截断。

  1. 虽然有效,但为什么我会收到错误消息?
  2. 仅删除
    error on error
    是否安全,或者可能会截断其他输入的数据?
  3. 如何向 json_table 添加
    RETURNING
    子句?
oracle plsql clob json-table
1个回答
0
投票
您使用的

json_value
函数默认返回 varchar2(4000)。 要扩展它,您可以使用
returning
子句,如错误消息所示。使用返回,您的查询应该是:

INSERT INTO IMP_JSON
SELECT json_name, json_value
FROM json_table (
    l_clob format json,
    '$[*]' error on error columns (
       json_name          varchar2(32000)     path '$.name'          null on empty,
       json_value         varchar2(32000)     path '$.value'         null on empty
    )
);


© www.soinside.com 2019 - 2024. All rights reserved.