Регулярное выражение может решить вашу проблему ... зависит от того, насколько сложна ваша полная проблема ... например,
create table clob(c clob(1M))
;
insert into clob values ('{ "commercialOfferPersonRoleList" :
[
{"commercialOfferPersonRolePK" : { "commercialOfferId" : 100000000008817 }
, "personId" : { "personID" : "1000019579" } }
, {"roleBusinessPartner" : { "value" : 1 } }
]
}')
;
select regexp_replace(c,'(,\s*)("personId"(.*?\}){1}?)\s*\}', '} \1 { \2 }', 1, 0, 'n') from clob;
, который возвращает
{ "commercialOfferPersonRoleList" :
[
{"commercialOfferPersonRolePK" : { "commercialOfferId" : 100000000008817 }
} , { "personId" : { "personID" : "1000019579" } }
, {"roleBusinessPartner" : { "value" : 1 } }
]
}
Чтобы вы могли сделать, например,
update clob set c = regexp_replace(c,'(,\s*)("personId"(.*?\}){1}?)\s*\}', '} \1 { \2 }',1,0,'n')
where regexp_like (c,'(,\s*)("personId"(.*?\}){1}?)\s*\}' ,1 ,'n');
Я предлагаю вам использовать SYSTOOLS.JSON2BSON
, чтобы проверить, что преобразованный BLOB-объект все еще является допустимым JSON, прежде чем вы фактически запустите обновление.
в этом примере я могу запустить это, чтобы проверить, что обновленный столбец все еще действителен JSON
select SYSTOOLS.BSON2JSON(SYSTOOLS.JSON2BSON(c)) from clob