【发布时间】:2017-05-20 09:10:51
【问题描述】:
我想在 json 中搜索文本。该 json 保留在 blob 字段中。我创建了下表
CREATE TABLE APPLICATION
(
applicationId VARCHAR2(36),
customerId VARCHAR2(36),
assignee VARCHAR2(36),
status VARCHAR2(36),
applicationDate TIMESTAMP,
closerDueDate TIMESTAMP,
closedDate TIMESTAMP,
application blob ,
CONSTRAINT application CHECK(application IS JSON FORMAT JSON)) LOB (application) STORE AS(STORAGE (NEXT 15M));
为了保留一行,我使用 SQL Develop UI 添加所有字段值并将 json 文件附加到 blob 字段中。 blob 字段中附加的文件具有 json 文本(巨大的 json)。
文件示例
{
"fields" : {
"Customerid" : "Organization"
}
}
//Huge Json
我想使用路径在 blob 字段内进行搜索。点赞:fields.Customerid:"Organization"
我正在使用以下查询,但它没有得到任何行
select *
from application app
where dbms_lob.instr(app.application, utl_raw.CAST_TO_RAW('AutomationRuleSet'), 1, 1) > 0;
我知道值存在于 json 中持久化
编辑 1
如果我尝试:
Select app.application
From APPLICATION app
Where JSON_QUERY(app.application, '$.fields.CustomerID') = 'AutomationRuleSet';
我明白了:
Error que empieza en la línea 1 del comando:
Select app.application From APPLICATION app Where JSON_QUERY(app.application, '$.fields.CustomerID') = 'AutomationRuleSet'
Error en la línea de comandos:2 Columna:6 Informe de error:
Error SQL: ORA-40499: no format defined for binary data type
有什么问题?
【问题讨论】:
-
@AlexPoole 如果我尝试:
Select app.application From APPLICATION app Where JSON_QUERY(app.application, '$.fields.CustomerID') = 'AutomationRuleSet';我得到了:Error que empieza en la línea 1 del comando: Select app.application From APPLICATION app Where JSON_QUERY(app.application, '$.fields.CustomerID') = 'AutomationRuleSet' Error en la línea de comandos:2 Columna:6 Informe de error: Error SQL: ORA-40499: no format defined for binary data type -
不要在 cmets edit 你的问题中添加代码。
-
@a_horse_with_no_name 我同意你的观点,但根据文档 BLOB 允许持久化 json。你怎么知道 CLOB 是 JSON 的推荐格式?
-
@a_horse_with_no_name - Oracle recommends that you use BLOB, not CLOB storage.
-
@AlexPoole:啊不知道。不过这很愚蠢,因为 BLOB 很难在普通 SQL 中使用 - 使用 CLOB 来查看内容要容易得多。
标签: sql json oracle blob oracle12c