Sql { “姓名”:“厄尔曼,何塞·曼努埃尔”, “工作”:“会计”, “雇佣”:“2006-03-07T00:00:00” } ] }', “$.employees[*]” 纵队( json CLOB格式json路径“$” ) )j ) ) 返回CLOB漂亮 ) ) 其中部门id=110;
dbfiddle为什么要在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要求输
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"
}
]
}