plsql怎么批量修改如下数据

表名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;

img

如果是要更新表里面的数据的话,直接一个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
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632