I have some issue here to update some value inside a clob data type. I am sharing some code about my situation. Please guide me is there any way to to write some update statement to update this?
CREATE TABLE TEST_CLOB
( ID NUMBER(10,0),
IMPORTDATA CLOB
);
insert into test_clob values (1001,'{"ClassId":30074,"Attributes":[{"Name":"ID","Value":"265794"},{"Name":"HREF","Value":"-1"},{"Name":"HPRECISION","Value":"5"},{"Name":"HMETHOD","Value":"96"},{"Name":"GEO-METHOD","Value":"96"},{"Name":"GEO-PRECISION","Value":"5"},{"Name":"GEO-VISIBILITY","Value":"0"},{"Name":"REMARK","Value":"-1"}]}');
insert into test_clob values (1002,'{"ClassId":30000,"Attributes":[{"Name":"ID","Value":"265756"},{"Name":"HREF","Value":"unknown"},{"Name":"HPRECISION","Value":"4"},{"Name":"HMETHOD","Value":"90"},{"Name":"GEO-METHOD","Value":"0"},{"Name":"GEO-PRECISION","Value":"1"},{"Name":"GEO-VISIBILITY","Value":"0"},{"Name":"REMARK","Value":"-1"}]}');
SELECT id,HMETHOD,HPRECISION, HREF
FROM (
select id,
name,
value
from test_clob tt1
CROSS APPLY JSON_TABLE
(
tt1.IMPORTDATA,
'$'
COLUMNS
(
classid NUMBER PATH '$.ClassId',
NESTED PATH '$.Attributes[*]' COLUMNS
(
name VARCHAR2(20) PATH '$.Name',
value VARCHAR2(20) PATH '$.Value'
)
)
)
)
PIVOT
(
MAX(value) FOR name IN
(
'HMETHOD' AS HMETHOD,
'HPRECISION' AS HPRECISION,
'HREF' AS HREF
)
);
Here it can display my data from above sql. I am giving the screenshot taken from fiddle.
Now my problem is to update HREF value from "unknown" to -1 for the whole table.
I am giving the fiddle link as well if anyone need to use there.
To update the table, you can use:
UPDATE test_clob
SET importdata = JSON_TRANSFORM(
importdata,
REPLACE '$.Attributes[*]?(
@.Name == "HREF"
&& @.Value == "unknown"
).Value' = '-1'
)
WHERE JSON_EXISTS(
importdata,
'$.Attributes[*]?(@.Name == "HREF" && @.Value == "unknown")'
);