用大小写更新 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;