如何在 Oracle 12c 中更新一部分 JSON 字符串



我的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

最新更新