使用JSON_MERGEPATCH后更新JSON列

问题描述

拥有这个

create table departments_json (
  department_id
    integer
    NOT NULL
    CONSTRAINT departments_json__id__pk PRIMARY KEY,department_data
    CLOB
    NOT NULL
    CONSTRAINT departments_json__data__chk CHECK ( department_data IS JSON )
);

insert into departments_json 
json values ( 110,'{
  "department": "Accounting","employees": [
    {
      "name": "Higgins,Shelley","job": "Accounting Manager","hireDate": "2002-06-07T00:00:00"
    },{
      "name": "Gietz,William","job": "Public Accountant","hireDate": "2002-06-07T00:00:00"
    }
  ]
}'
);

还有新的json:

{
  "employees": [
    {
      "name": "Chen,John","job": "Accountant","hireDate": "2005-09-28T00:00:00"
    },{
      "name": "Greenberg,Nancy","job": "Finance Manager","hireDate": "2002-08-17T00:00:00"
    },{
      "name": "Urman,Jose Manuel","hireDate": "2006-03-07T00:00:00"
    }
  ]
}

POST之后,回复对我有很大帮助。但是现在是时候使用新的json更新department_data列了。我正在使用此查询:

update departments_json d
set d.department_data = 
    WITH employees ( json ) AS (
      SELECT j.json
      FROM   departments_json d
             CROSS APPLY JSON_TABLE(
               d.department_data,'$.employees[*]'
               COLUMNS (
                 json CLOB FORMAT JSON PATH '$'
               )
             ) j
      WHERE  d.department_id = 110
    UNION ALL
      SELECT j.json
      FROM   JSON_TABLE(
               '{
      employees: [
        {
          name: Chen,John,job: Accountant,hireDate: 2005-09-28T00:00:00
        },{
          name: Greenberg,Nancy,job: Finance Manager,hireDate: 2002-08-17T00:00:00
        },{
          name: Urman,Jose Manuel,hireDate: 2006-03-07T00:00:00
        }
      ]
    }','$.employees[*]'
               COLUMNS (
                 json CLOB FORMAT JSON  PATH '$'
               )
             ) j
    )JSON_MERGEPATCH(
         d.department_data,(
           SELECT JSON_OBJECT(
                    KEY 'employees'
                    VALUE JSON_ARRAYAGG( json FORMAT JSON RETURNING CLOB )
                    FORMAT JSON
                  )
           FROM   employees
         )
       )
WHERE  d.department_id = 110;

但是我遇到了这个错误,我不知道哪里出了错

错误:

Error en la línea de comandos : 3 Columna : 5
Informe de error -
Error SQL: ORA-00936: falta una expresión
00936. 00000 -  "missing expression"
*Cause:    
*Action:

怎么了,我正在执行此步骤:LINK

注意:这是我的桌子的样子:

enter image description here

更新

在应用MP0建议后,这就是我的查询的样子(两个选项)

enter image description here

enter image description here

但是问题是我有这个错误:

ORA-40478: output value too large (maximum: 4000)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)