如何在Oracle 12.1中更新JSON列

时间:2019-09-26 10:35:18

标签: json oracle

正在尝试在Oracle 12.1中更新JSON列。是否有可用于更新JSON的json函数。我添加了一个约束JSON_COLUMN是JSON。

我已经尝试过:

UPDATE tablename SET JSON =
json_mergepatch(JSON, '{"STRUCTURE_NAME":null}');

但是此功能仅适用于19c

This "STRUCTURE_NAME": "ABC:STATE:L12345", needs to be updated with "STRUCTURE_NAME":null

1 个答案:

答案 0 :(得分:1)

-19c之前的版本,如果要更改JSON文档中的任何值,则必须替换整个内容:

create table t (
  doc varchar2(100)
    check ( doc is json ) 
);

insert into t values ('{
  "changeMe" : "to null",
  "leaveMe"  : "alone"
}');

update t
set    doc = '{
  "changeMe" : null,
  "leaveMe"  : "alone"
}';

select * from t;

DOC                                               
{
  "changeMe" : null,
  "leaveMe"  : "alone"
}  

请注意,当您使用19 {c}并使用json_mergepatch时,将属性设置为null会将其从文档中删除:

update t
set    doc = json_mergepatch ( 
  doc, 
  '{
    "changeMe" : null
  }');

select * from t;

DOC                   
{"leaveMe":"alone"}