表名aa,字段名XX
修改前:{"expand":[{"zd":"imageParameters","mrz":"{"visibleLayers":[40]}","sm":"动态图层指定显示的图层号"},
修改后:{"expand":[{"zd":"imageParameters","mrz":"{"visibleLayers":[40]}","sm":"动态图层指定显示的图层号"},{"zd":"layers","mrz":"40","sm":"三维动态图层拓展参数"}]
修改前visibleLayers":[40] 中括号中的数值和后面添加的{"zd":"layers","mrz":"40","sm":"三维动态图层拓展参数"}mrz对应的数值一致
oracle12c开始,提供了一些函数支持json的读写操作
但是你这个字符串好像修改前和修改后都不是完整的json串,那么可以采取识别字符串来定位进行截取和拼接的方式来处理
declare
str varchar2(32767) := '{"expand":[{"zd":"imageParameters","mrz":"{"visibleLayers":[40]}","sm":"动态图层指定显示的图层号"}';
begin
str := str || ',{"zd":"layers","mrz":"' ||
substr(str,
instr(str, '"visibleLayers":[') +
length('"visibleLayers":['),
instr(str, ']}","sm"') - instr(str, '"visibleLayers":[') -
length('"visibleLayers":[')) || '","sm":"三维动态图层拓展参数"}]';
dbms_output.put_line(str);
end;
如果是要更新表里面的数据的话,直接一个update 就完事了,当然前提是你要确保字符串规则是完全一致的
update aa
set xx = xx || ',{"zd":"layers","mrz":"' ||
substr(xx,
instr(xx, '"visibleLayers":[') +
length('"visibleLayers":['),
instr(xx, ']}","sm"') - instr(xx, '"visibleLayers":[') -
length('"visibleLayers":[')) || '","sm":"三维动态图层拓展参数"}]'
where xx is not null
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!