JSON_MERGEPATCH in Oracle Database 19c
The JSON_MERGEPATCH function is used to modify parts of a JSON document in select and update operations.
oracle 19cconfigurationintermediate
by OracleDba
17 views
The JSON_MERGEPATCH function is used to modify parts of a JSON document in select and update operations.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
JSON_MERGEPATCH
( target_expr , patch_expr [ returning_clause ] [ PRETTY ] [ ASCII ]
[ TRUNCATE ] [ on_error_clause ] )
-- DROP TABLE json_documents PURGE;
CREATE TABLE json_documents (
id NUMBER,
data VARCHAR2(4000),
CONSTRAINT json_documents_is_json CHECK (data IS JSON)
);
INSERT INTO json_documents (id, data) VALUES (1, '{"id":1,"first_name":"Iron","last_name":"Man"}');
INSERT INTO json_documents (id, data) VALUES (2, '{"id":2,"first_name":"Wonder","last_name":"Woman"}');
INSERT INTO json_documents (id, data) VALUES (3, '{"id":3,"first_name":"The","last_name":"Hulk"}');
COMMIT;
SELECT data FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,"first_name":"Iron","last_name":"Man"}
{"id":2,"first_name":"Wonder","last_name":"Woman"}
{"id":3,"first_name":"The","last_name":"Hulk"}
SQL>
SELECT JSON_MERGEPATCH(data, '{"last_name":"banana"}') AS data
FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,"first_name":"Iron","last_name":"
banana
"}
{"id":2,"first_name":"Wonder","last_name":"
banana
"}
{"id":3,"first_name":"The","last_name":"
banana
"}
SQL>
SELECT JSON_MERGEPATCH(data, '{"new_element":"surprise"}') AS data
FROM json_documents;
DATA
--------------------------------------------------------------------------------
{"id":1,"first_name":"Iron","last_name":"Man",
"new_element":"surprise"
}
{"id":2,"first_name":"Wonder","last_name":"Woman",
"new_element":"surprise"
}
{"id":3,"first_name":"The","last_name":"Hulk",
"new_element":"surprise"
}
SQL>
SELECT JSON_MERGEPATCH(data, '{"last_name":NULL}') AS data
FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,"first_name":"Iron"}
{"id":2,"first_name":"Wonder"}
{"id":3,"first_name":"The"}
SQL>
SELECT JSON_MERGEPATCH(data, '{"last_name":""}') AS data
FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,"first_name":"Iron",
"last_name":""
}
{"id":2,"first_name":"Wonder",
"last_name":""
}
{"id":3,"first_name":"The",
"last_name":""
}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"first_name":NULL, "last_name":"banana","new_element":"surprise"}') AS data
FROM json_documents a
WHERE a.data.first_name = 'Iron';
DATA
---------------------------------------------------------------------------------
{"id":1,
"last_name":"banana","new_element":"surprise"
}
SQL>1234567891011121314151617181920212223242526272829303132333435
INSERT INTO json_documents VALUES (4, '{"id":4,"my_array":[{"attr1":"val1"},{"attr2":"val2"},{"attr3":"val3"}]}');
SELECT data
FROM json_documents a
WHERE a.id = 4;
DATA
---------------------------------------------------------------------------------
{"id":4,"my_array":[{"attr1":"val1"},{"attr2":"val2"},{"attr3":"val3"}]}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"attr3":"fail"}') AS data
FROM json_documents a
WHERE a.id = 4;
DATA
---------------------------------------------------------------------------------------
{"id":4,"my_array":[{"attr1":"val1"},{"attr2":"val2"},{"attr3":"val3"}],
"attr3":"fail"
}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"my_array":[{"attr1":"val1"},{"attr2":"val2"},{"attr3":"success"}]}') AS data
FROM json_documents a
WHERE a.id = 4;
DATA
---------------------------------------------------------------------------------
{"id":4,"my_array":[{"attr1":"val1"},{"attr2":"val2"},
{"attr3":"success"}
]}
SQL>12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
INSERT INTO json_documents VALUES (5, '{"id":5,"parent1":{"child1":1, "child2":2}}');
SELECT data
FROM json_documents a
WHERE a.id = 5;
DATA
---------------------------------------------------------------------------------
{"id":5,"parent1":{"child1":1,"child2":2}}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"child2":99}') AS data
FROM json_documents a
WHERE a.id = 5;
DATA
---------------------------------------------------------------------------------
{"id":5,"parent1":{"child1":1,"child2":2},
"child2":99
}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"parent1":{"child1":1,"child2":99}}') AS data
FROM json_documents a
WHERE a.id = 5;
DATA
---------------------------------------------------------------------------------
{"id":5,"parent1":{"child1":1,
"child2":99
}}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"parent1":{"child2":99}}') AS data
FROM json_documents a
WHERE a.id = 5;
DATA
---------------------------------------------------------------------------------
{"id":5,"parent1":{"child1":1,
"child2":99
}}
SQL>
SELECT JSON_MERGEPATCH(a.data,'{"parent1":'|| JSON_MERGEPATCH(a.data.parent1, '{"child2":99}') ||'}') AS data
FROM json_documents a
WHERE a.id = 5;
DATA
--------------------------------------------------------------------------------
{"id":5,"parent1":{"child1":1,"child2":99}}
SQL>123456789101112131415161718192021222324252627282930313233343536
TRUNCATE TABLE json_documents;
INSERT INTO json_documents (id, data) VALUES (1, '{"id":1,"first_name":"Iron","last_name":"Man"}');
INSERT INTO json_documents (id, data) VALUES (2, '{"id":2,"first_name":"Wonder","last_name":"Woman"}');
INSERT INTO json_documents (id, data) VALUES (3, '{"id":3,"first_name":"The","last_name":"Hulk"}');
COMMIT;
SELECT data FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,"first_name":"Iron","last_name":"Man"}
{"id":2,"first_name":"Wonder","last_name":"Woman"}
{"id":3,"first_name":"The","last_name":"Hulk"}
SQL>
UPDATE json_documents a
SET a.data = JSON_MERGEPATCH(a.data, '{"last_name":"banana","new_element":"surprise"}')
WHERE a.data.first_name = 'Iron';
SELECT data FROM json_documents;
DATA
---------------------------------------------------------------------------------
{"id":1,
"first_name":"Iron","last_name":"banana","new_element":"surprise"
}
{"id":2,"first_name":"Wonder","last_name":"Woman"}
{"id":3,"first_name":"The","last_name":"Hulk"}
SQL>
ROLLBACK;123456789101112131415161718192021222324252627
SELECT JSON_MERGEPATCH(a.data, '{"last_name":"banana"}'
PRETTY
) AS data
FROM json_documents a
WHERE a.data.first_name = 'Iron';
DATA
---------------------------------------------------------------------------------
{
"id" : 1,
"first_name" : "Iron",
"last_name" : "banana"
}
SQL>
SELECT JSON_MERGEPATCH(a.data, '{"last_name":"banana"}' RETURNING VARCHAR2(10)
TRUNCATE
) AS data
FROM json_documents a
WHERE a.data.first_name = 'Iron';
DATA
---------------------------------------------------------------------------------
{"id":1,"f
SQL>123456789101112131415161718192021222324
-- Default behaviour.
SELECT JSON_MERGEPATCH(a.data, '{}' RETURNING VARCHAR2(10)
NULL ON ERROR
) AS data
FROM json_documents a
WHERE a.data.first_name = 'Iron';
DATA
---------------------------------------------------------------------------------
SQL>
SELECT JSON_MERGEPATCH(a.data, '{}' RETURNING VARCHAR2(10)
ERROR ON ERROR
) AS data
FROM json_documents a
WHERE a.data.first_name = 'Iron';
*
ERROR at line 2:
ORA-40478: output value too large (maximum: 10)
SQL>1234567891011121314151617181920212223242526272829303132333435363738394041
SET SERVEROUTPUT ON
DECLARE
l_json_doc VARCHAR2(32767);
BEGIN
l_json_doc := '{"id":1,"first_name":"Iron","last_name":"Man"}';
DBMS_OUTPUT.put_line('Before: ' || l_json_doc);
l_json_doc := JSON_MERGEPATCH(l_json_doc, '{"last_name":"banana"}');
DBMS_OUTPUT.put_line('After : ' || l_json_doc);
END;
/
l_json_doc := JSON_MERGEPATCH(l_json_doc, '{"last_name":"banana"}');
*
ERROR at line 7:
ORA-06550: line 7, column 17:
PLS-00201: identifier 'JSON_MERGEPATCH' must be declared
ORA-06550: line 7, column 3:
PL/SQL: Statement ignored
SQL>
DECLARE
l_json_doc VARCHAR2(32767);
BEGIN
l_json_doc := '{"id":1,"first_name":"Iron","last_name":"Man"}';
DBMS_OUTPUT.put_line('Before: ' || l_json_doc);
SELECT JSON_MERGEPATCH(l_json_doc, '{"last_name":"banana"}')
INTO l_json_doc
FROM dual;
DBMS_OUTPUT.put_line('After : ' || l_json_doc);
END;
/
Before: {"id":1,"first_name":"Iron","last_name":"Man"}
After : {"id":1,"first_name":"Iron",
"last_name":"banana"
}
SQL>Please to add comments
No comments yet. Be the first to comment!