Sql { “姓名”:“厄尔曼,何塞·曼努埃尔”, “工作”:“会计”, “雇佣”:“2006-03-07T00:00:00” } ] }', “$.employees[*]” 纵队( json CLOB格式json路径“$” ) )j ) ) 返回CLOB漂亮 ) ) 其中部门id=110;

Sql { “姓名”:“厄尔曼,何塞·曼努埃尔”, “工作”:“会计”, “雇佣”:“2006-03-07T00:00:00” } ] }', “$.employees[*]” 纵队( json CLOB格式json路径“$” ) )j ) ) 返回CLOB漂亮 ) ) 其中部门id=110;,sql,oracle,oracle19c,oracle-apex-19.1,Sql,Oracle,Oracle19c,Oracle Apex 19.1,dbfiddle为什么要在BLOB数据类型(二进制数据)中对JSON(字符数据)进行排序,为什么要在RAW数据类型中进行转换?为什么不直接使用CLOB?这不是问题,问题在于如何定义表。问题在于如何在第一个json对象中追加新的json对象。Regardsthanks,但有一点,为什么要重新创建表,列类型不能修改,在本例中,我手动创建表,但基于使用BLOB的原始表。不能将这些响应调整到BLOB列吗?。Regards@Julio此外,UTL\u RAW.CAST\u TO\u VARCHAR2要求输

dbfiddle

为什么要在
BLOB
数据类型(二进制数据)中对JSON(字符数据)进行排序,为什么要在
RAW
数据类型中进行转换?为什么不直接使用
CLOB
?这不是问题,问题在于如何定义表。问题在于如何在第一个json对象中追加新的json对象。Regardsthanks,但有一点,为什么要重新创建表,列类型不能修改,在本例中,我手动创建表,但基于使用BLOB的原始表。不能将这些响应调整到BLOB列吗?。Regards@Julio此外,
UTL\u RAW.CAST\u TO\u VARCHAR2
要求输入少于4000个字符;当您向JSON数组添加更多项并且字符串变得太长时,这会很快中断查询。如果使用
CLOB
,则可以绕过此转换并存储非常大的JSON片段。我使用utl_raw.cast_to_varchar2(department_data)只是为了查看插入是否有效,这并不是什么特别的事情。现在的重点是,我建议如何将列类型从BLOB更改为CLOB。此外,我还按照本教程创建/复制源表,这家伙使用Blob当我看到他们在博客中试图表达的关于角色集的观点时,他们方法的不幸副作用分别是,获取并返回
VARCHAR2
数据类型,如果JSON值大于4000个字符,则它们可能会失败(如我在前面的注释中的dbfiddle中所示)。如果您不担心字符集问题,只需使用
CLOB
,因为它要简单得多。@Julio更新了一个函数,可以将
CLOB\u转换为\u BLOB
,该函数不使用
UTL\u RAW。将\u转换为\u RAW
,然后执行
UPDATE
(或
INSERT
)语句将
JSON\u MERGEPATCH
的输出包装起来,以将其
CLOB
输出转换为
BLOB
create table departments_json (
  department_id   integer not null primary key,
  department_data blob not null
);

alter table departments_json
add constraint dept_data_json 
check ( department_data is json );

insert into departments_json 
json values ( 110, utl_raw.cast_to_raw ( '{
  "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"
    }
  ]
}' ));

select department_id, utl_raw.cast_to_varchar2(department_data)
from departments_json
where department_id = 110;
{
  "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",
      "job": "Accountant",
      "hireDate": "2006-03-07T00:00:00"
    }
  ]
}
MERGED
-----------------------------------------
{
  "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"
    },
    {
      "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",
      "job" : "Accountant",
      "hireDate" : "2006-03-07T00:00:00"
    }
  ]
}