我的oracle数据库中有一个表,如下所示。
CREATE TABLE my_table(
id RAW(16) NOT NULL,
data CLOB,
CONSTRAINT my_table_pk PRIMARY KEY (id),
CONSTRAINT my_table_json_chk CHECK (data IS JSON)
);
INSERT INTO my_table (id, data)
VALUES (SYS_GUID(),
'{
"FirstName" : "aa",
"LastName" : "bb",
"Address" : {
"Street" : "99 My Street",
"City" : "My City",
"Country" : "UK",
"Postcode" : "A12 34B"
}');
现在我知道了,我可以使用 $ 获取特定属性的值,例如 JSON 字符串address
。
同样,是否可以在不Street
更新查询中提供整个 JSON 结构的情况下更新 JSON 字符串的属性?
请帮我解决这个问题。
在12.2.0.1.0中通过PL/SQL支持。新的 PL/SQL 对象支持对 JSON 内容进行细粒度操作
- JSON_OBJECT_T:用于处理 JSON 对象
- JSON_ARRAY_T:用于处理 JSON 数组
JSON_OBJECT_T和JSON_ARRAY_T是JSON_ELEMENT_T的亚型
这些对象提供了一组用于操作类似于 GSON 的 JSON 的方法。
enter code here
WITH FUNCTION updateTax(JSON_DOC in VARCHAR2 ) RETURN VARCHAR2
IS
jo JSON_OBJECT_T;
price NUMBER;
taxRate NUMBER;
BEGIN
jo := JSON_OBJECT_T(JSON_DOC);
taxRate := jo.get_Number('taxRate');
price := jo.get_Number('total');
jo.put('totalIncludingTax', price * (1+taxRate));
RETURN jo.to_string();
END;
ORDERS as (
select '{"taxRate":0.175,"total":10.00}' JSON_DOCUMENT
from dual
)
select JSON_DOCUMENT, updateTax(JSON_DOCUMENT)
from ORDERS;
JSON_DOCUMENT UPDATETAX(JSON_DOCUMENT)
------------------------------- --------------------------------------------------------
{"taxRate":0.175,"total":10.00} {"taxRate":0.175,"total":10.00,"totalIncludingTax":11.75}
https://docs.oracle.com/database/122/ADJSN/using-PLSQL-object-types-for-JSON.htm#ADJSN-GUID-F0561593-D0B9-44EA-9C8C-ACB6AA9474EE