我在 Oracle 資料庫中有一個名為“configuration”的 json 列,其資料如下 -
{"sections":[{"active":true,"code":"page.about"},{"active":true,"code":"page.title"}...]}
如何向 CLOB 內的“sections”陣列添加元素?例如,將此物件添加到 CLOB- {"active":false, "code":"page.body"}
我試圖這樣做-
UPDATE *TABLE_NAME*
SET configuration = JSON_MODIFY(configuration, 'append $.sections',JSON_QUERY(N'{"active":false,"code":"page.body"}'))
但我收到此錯誤 - 錯誤報告 - SQL 錯誤:ORA-00917:缺少逗號 00917。00000 - “缺少逗號” *原因:
*操作:
謝謝!
uj5u.com熱心網友回復:
您可以創建函式:
CREATE FUNCTION json_append_array(
json IN CLOB,
path IN VARCHAR2,
value IN CLOB
) RETURN CLOB
IS
j_obj JSON_OBJECT_T := JSON_OBJECT_T(json);
j_arr JSON_ARRAY_T := j_obj.get_Array(path);
BEGIN
j_arr.append( JSON_OBJECT_T(value) );
RETURN j_obj.to_Clob();
END;
/
然后你可以更新表:
UPDATE TABLE_NAME
SET configuration = JSON_APPEND_ARRAY(
configuration,
'sections',
'{"active":false,"code":"page.body"}'
);
然后:
SELECT *
FROM table_name;
輸出:
配置 {"sections":[{"active":true,"code":"page.about"},{"active":true,"code":"page.title"},{"active":false,"代碼":"page.body"}]}
db<>在這里小提琴
uj5u.com熱心網友回復:
您可以將陣列拆分為行UNION ALL以添加另一行并重新聚合并用于JSON_MERGEPATCH更新物件:
MERGE INTO table_name dst
USING (
SELECT t.ROWID AS rid,
a.new_value
FROM table_name t
CROSS JOIN LATERAL (
SELECT JSON_OBJECT(
KEY 'sections' VALUE JSON_ARRAYAGG(value FORMAT JSON)
) AS new_value
FROM (
SELECT value
FROM JSON_TABLE(
t.configuration,
'$.sections[*]'
COLUMNS value CLOB FORMAT JSON PATH '$'
)
UNION ALL
SELECT EMPTY_CLOB() || '{"active":false,"code":"page.body"}' FROM DUAL
)
) a
) src
ON (dst.ROWID = src.rid)
WHEN MATCHED THEN
UPDATE
SET configuration = JSON_MERGEPATCH(dst.configuration, src.new_value);
其中,對于樣本資料:
CREATE TABLE table_name (configuration CLOB CHECK (configuration IS JSON));
INSERT INTO table_name ( configuration )
VALUES ('{"sections":[{"active":true,"code":"page.about"},{"active":true,"code":"page.title"}]}');
然后,在合并陳述句之后:
SELECT *
FROM table_name;
輸出:
配置 {"sections":[{"active":true,"code":"page.about"},{"active":true,"code":"page.title"},{"active":false,"代碼":"page.body"}]}
db<>在這里小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336034.html
上一篇:C#無效列名問題但與其他人不同
