JSON_MERGE_PATCH
功能描述
合并JSON文本。
语法格式
JSON_MERGE_PATCH( json_doc, json_doc[, json_doc]... )
参数说明
json_doc:两个以上JSON文本,JSON类型或JSON String类型。
说明:
- 如果任何参数为NULL则返回NULL。
- 若第一个参数不是对象,合并结果就是第二个参数。
- 若两个参数都为对象,则遵守以下规则: - 第一个对象的所有成员键不存在于第二个对象中。
- 第二个对象的所有成员键不存在于第一个对象中且值不为null。否则该键将被在结果中忽略。
- 所有成员键都存在于第一、第二个对象中且第二个对象中的值不为null。否则该键将被在结果中忽略。- json_doc不为有效JSON文本将抛出错误。
函数返回类型
JSON数值类型
示例
sql
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"a": null, "b": 1, "e": 5}', '{"c": 2, "b": null, "d": null, "e": 10}'));
EXPR1 |
------------------------------------------------------------------------------
{"a": null, "c": 2, "e": 10}|
-- 非 JSON 对象类型合并
SQL> SELECT
TO_CHAR(JSON_MERGE_PATCH('2', 'true')),
TO_CHAR(JSON_MERGE_PATCH('true', '2')),
TO_CHAR(JSON_MERGE_PATCH('[1, 2]', '2')),
TO_CHAR(JSON_MERGE_PATCH('2', '[1, 2]')),
TO_CHAR(JSON_MERGE_PATCH('[1, 2]', '[2, 3]'));
EXPR1 | EXPR2 | EXPR3 | EXPR4 | EXPR5 |
------------------------------------------------------------------------------
true| 2| 2| [1, 2]| [2, 3]|
-- 合并两个或多个 JSON 对象
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'));
EXPR1 |
------------------------------------------------------------------------------
{"x": 2, "y": 3, "z": 7}|
-- 若第二个参数中存在值为 null 的键,则该键不会出现结果对象中
SQL> SELECT TO_CHAR(JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}'));
EXPR1 |
------------------------------------------------------------------------------
{"x": 2}|