用大小写更新 CLOB JSON 列给出 ORA-00932:不一致的数据类型:预期的 CHAR 得到了 CLOB
Update CLOB JSON column with case gives ORA-00932: inconsistent datatypes: expected CHAR got CLOB
我有一个包含 JSON 的 CLOB 列,我想使用 json_mergepatch
更新 JSON 的值。如果该列为 NULL,则 json_mergepatch
不起作用,因此在这种情况下,我只想添加给定的新 JSON。
我必须使用 CLOB 来避免这个问题:
这有效并更新了列:
UPDATE my_table SET data =
json_mergepatch(data, '{ "user": "Tony" }' RETURNING CLOB)
where id = '1';
这给出 ORA-00932: inconsistent datatypes: expected CHAR got CLOB
:
UPDATE my_table SET data =
case
when (data is NULL) then '{ "user": "Tony" }'
else json_mergepatch(data, '{ "user": "Tony" }' RETURNING CLOB)
end
where id = '1';
为什么它不适用于 case
?我该如何解决?
问题很可能在于 CASE
returns 不是预期的数据类型。
与您的说法相反,json_mergepatch
在 NULL
JSON 列上也有效 ,但结果仍然是 NULL
(这是你不期望的)。
不确定这是不是最优雅的解决方案,但它显然有效,方法是将 NULL
更改为 空 JSON 和 NVL
UPDATE tab SET data =
json_mergepatch(nvl(data,'{}'), '{ "user": "Tony" }' RETURNING CLOB)
where id = 1;
我有一个包含 JSON 的 CLOB 列,我想使用 json_mergepatch
更新 JSON 的值。如果该列为 NULL,则 json_mergepatch
不起作用,因此在这种情况下,我只想添加给定的新 JSON。
我必须使用 CLOB 来避免这个问题:
这有效并更新了列:
UPDATE my_table SET data =
json_mergepatch(data, '{ "user": "Tony" }' RETURNING CLOB)
where id = '1';
这给出 ORA-00932: inconsistent datatypes: expected CHAR got CLOB
:
UPDATE my_table SET data =
case
when (data is NULL) then '{ "user": "Tony" }'
else json_mergepatch(data, '{ "user": "Tony" }' RETURNING CLOB)
end
where id = '1';
为什么它不适用于 case
?我该如何解决?
问题很可能在于 CASE
returns 不是预期的数据类型。
与您的说法相反,json_mergepatch
在 NULL
JSON 列上也有效 ,但结果仍然是 NULL
(这是你不期望的)。
不确定这是不是最优雅的解决方案,但它显然有效,方法是将 NULL
更改为 空 JSON 和 NVL
UPDATE tab SET data =
json_mergepatch(nvl(data,'{}'), '{ "user": "Tony" }' RETURNING CLOB)
where id = 1;