【问题标题】:Update CLOB JSON column with case gives ORA-00932: inconsistent datatypes: expected CHAR got CLOB用大小写更新 CLOB JSON 列给出 ORA-00932:不一致的数据类型:预期的 CHAR 得到 CLOB
【发布时间】:2021-12-27 11:24:49
【问题描述】:

我有一个包含 JSON 的 CLOB 列,我想使用 json_mergepatch 更新 JSON 的值。如果该列为 NULL,则 json_mergepatch 不起作用,所以在这种情况下,我只想添加给定的新 JSON。

我必须使用 CLOB 来避免这个问题:Oracle Update - JSON Merge Patch with more than 4000 characters

这有效并更新了列:

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?我该如何解决?

【问题讨论】:

    标签: sql json oracle clob oracle19c


    【解决方案1】:

    问题很可能在于CASE 返回的数据类型不是预期的。

    与您的说法相反,json_mergepatch 工作 也可以在 NULL JSON 列上正常工作,但结果仍然是 NULL(这是您不期望的)。

    不确定这是不是最优雅的解决方案,但它显然可以通过将NULL 更改为带有NVL空JSON

    UPDATE tab SET data =
      json_mergepatch(nvl(data,'{}'), '{ "user": "Tony" }' RETURNING CLOB)
    where id = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多