我的oracle DB中的表格如下所示。
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
等特定属性的值。
同样,我可以更新JSON字符串的Street
属性而不在更新查询中提供整个JSON结构吗?
请帮我解决这个问题。
答案 0 :(得分:1)
这是通过12.2.0.1.0中的PL / SQL支持的。新的PL / SQL对象支持对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}