簡體   English   中英

Oracle - json_mergepatch 將列更新為 NULL

[英]Oracle - json_mergepatch updating column to NULL

我有一個帶有 JSON 的表列:

{ "name":"Tony","age":"20","sex":"male" }

當我嘗試使用json_mergepatch添加新數據時:

UPDATE users SET user =
  json_mergepatch(user, '{"email":"tony@mail.com"}')
where name = 'Tony';

我的列數據變為Null而不是{ "name":"Tony","age":"20","sex":"male", "email":"tony@mail.com" }

請參閱小提琴: https: //dbfiddle.uk/ ? rdbms = oracle_18 & fiddle = 7cbe31629bb709d1bbe7056fc6710673 Fiddle 有效,但在我的代碼中,由於某種原因它不起作用。 我的 JSON 有效。

我究竟做錯了什么?

更新


即使列是 CLOB,Oracle 似乎對 JSON 也有 4000 個字符的限制。 當使用json_mergepatch操作時,如果該列有 4000 個字符,它會使其為 NULL!
通過測試發現了這個。

有沒有辦法克服這個限制?

這對我有用:

CREATE TABLE users (
  id    NUMBER,
  xuser  VARCHAR2(4000),
  CONSTRAINT users_is_json CHECK (xuser IS JSON)
);

INSERT INTO users (id, xuser) VALUES (1, '{ "name":"Tony","age":"20","sex":"male" }');

UPDATE users a 
SET    a.xuser = JSON_MERGEPATCH(a.xuser, '{"email":"tony@email.com"}') 
WHERE  a.xuser.name = 'Tony';

SELECT * FROM users;

ID  XUSER
--  -----
1   
{
"name" : "Tony",
"age" : "20",
"sex" : "male",
"email" : "tony@xmail.com"
}

由於“user”是一個oracle保留字,應該避免使用它們,因此我將其命名為“xuser”。 當我刪除別名“a”時,它會出現ORA-00904: "XUSER"."NAME": invalid identifier錯誤ORA-00904: "XUSER"."NAME": invalid identifier

在這里找到解決方案: Oracle 更新 - 超過 4000 個字符的 JSON 合並補丁

UPDATE users SET user =
  json_mergepatch(user, '{"email":"tony@mail.com"}' RETURNING CLOB)
where name = 'Tony';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM