在 oracle 中更新 JSON 键的值
Posted
技术标签:
【中文标题】在 oracle 中更新 JSON 键的值【英文标题】:Update the value of JSON key in oracle 【发布时间】:2021-02-03 13:37:22 【问题描述】:我正在使用 Oracle SQL Developer 并且想要更新 JSON 中特定键的值。
我正在使用以下查询:
update M
set OBJECT = json_mergepatch (
OBJECT, ' "$.ABC.DATA.WORKFLOW_STATUS.ABC" : "MONIKA" '
) WHERE KEY_1 = '121';
输出:错误报告
SQL 错误:ORA-00904:“JSON_MERGEPATCH”:标识符无效 00904. 00000 - "%s: 无效标识符"
请建议我正确的查询。
【问题讨论】:
原始 JSON 的结构是什么,您期望的 JSON 结果是什么? 在我的 JSON 中,此路径 (ABC.DATA.WORKFLOW_STATUS.ABC) 存在 n 想要更新此键中的值,但它不支持 JSON_MERGEPATCH 请告诉我们您的 Oracle 数据库的准确版本 - 不是 SQL Developer,而是数据库本身。每个提出问题的人都应该这样做。 @StewAshton 我正在使用 Oracle Database 12c 企业版 JSON_MERGEPATCH 是在 Oracle 数据库 19c 版中引入的。如果您尝试在旧版本中使用它,您将收到“无效标识符”消息 - 您已经这样做了。 【参考方案1】:假设您尝试更新的 JSON 的结构类似于:
CREATE TABLE test_data
AS
SELECT '121' AS key_1, '
"ABC":
"WORKFLOW_STATUS":
"ABC": "some value",
"XYZ": 5.23
,
"OTHER": "fancy text"
,
"DEF": 123
' AS object_val FROM DUAL
UNION ALL
SELECT '122' AS key_1, '
"ABC":
"WORKFLOW_STATUS":
"ABC": "other value",
"XYZ": 2
,
"OTHER": "cool text"
,
"DEF": 999
' AS object_val FROM DUAL;
更新 JSON 路径 $.ABC.DATA.WORKFLOW_STATUS.ABC 的正确语法是这样的:
UPDATE test_data
SET object_val = json_mergepatch (object_val, '"ABC":"WORKFLOW_STATUS":"ABC":"MONIKA"')
WHERE key_1 = '121';
【讨论】:
感谢@E J Egyed,但我仍然面临同样的错误。 您的 Oracle 数据库是什么版本? JSON_MERGEPATCH 直到 19c 才引入。 我使用的是 Oracle Database 12c 企业版 那么您将无法使用 JSON_MERGEPATCH,因为它是 19c 中引入的新功能 谢谢@EJ Egyed,但今天我已经替换了 JSON_MERGEPATCH,我们可以使用 Regexp_replace 代替 JSON_MERGEPATCH,它会起作用。以上是关于在 oracle 中更新 JSON 键的值的主要内容,如果未能解决你的问题,请参考以下文章