2017-01-05 15 views
2

Я хочу найти текст внутри json. что json сохраняется в поле blob. Я создал таблицу следовать заКак выполнить поиск в Json-файле, прикрепленном в поле BLOB с использованием Oracle 12c?

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 Разработка пользовательского интерфейса, чтобы добавить все значения полей и прикрепить файл JSON в поле BLOB. Файл, прикрепленный в поле blob, имеет json-текст (огромный json).

Пример файла

{ 
    "fields" : { 
     "Customerid" : "Organization" 
    }  
} 
//Huge Json 

Я хочу искать внутри области больших двоичных объектов с использованием пути. Как: 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 

чем проблема?

+0

@AlexPoole если я попробую: '' Выберите app.application Из приложения APPLICATION Где JSON_QUERY (app.application, '$ .fields.CustomerI D ') =' AutomationRuleSet '; '' я получил: '' Ошибка дие empieza ан ла línea 1 дель Comando: Выберите app.application из приложения приложения Где JSON_QUERY (app.application, «$ .полей.CustomerID ') =' AutomationRuleSet ' Ошибка при загрузке: 2 Коламна: 6 Ошибка: Ошибка SQL: ORA-40499: формат не задан для двоичного типа данных'' – cheloncio

+1

Не добавлять код в комментарии [ изменить] ваш вопрос. –

+0

@a_horse_with_no_name Я согласен с вами, но в соответствии с документом BLOB разрешить сохранение json. Как вы знаете, CLOB является рекомендуемым форматом для JSON? – cheloncio

ответ

1

вы можете найти строки, в которых JSON BLOBS содержат ключевой путь с json_exists():

select * from application app 
where json_exists(app.application, '$.fields.Customerid'); 

Вы можете осуществлять поиск определенного значения с json_value():

select * from application app 
where json_value(app.application, '$.fields.Customerid') = 'AutomationRuleSet'; 

Как вы используете BLOB вам может потребоваться указать format json, хотя мне не нужно тестировать это в 12.2 и определении вашей таблицы:

select * from application app 
where json_exists(application format json, '$.fields.Customerid'); 

select * from application app 
where json_value(application format json, '$.fields.Customerid') = 'AutomationRuleSet'; 

Oracle Live SQL demo.

+0

Я получил '' Ошибка SQL: ORA-40499: формат не определен для двоичного типа данных'' – cheloncio

+0

Как открыть файл для поиска текста? – cheloncio

+0

Помогает ли добавить 'format json', с помощью этих или ваших' json_query' попыток? Я обновил ответ, чтобы показать, куда он идет. –

0

Быстрое решение: Я нашел решение, в основном я должен был преобразовать BLOB в VARCHAR2

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(app.application, 4000, 1)) AS aplication 
from application app 
Where JSON_VALUE(UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(app.application, 4000, 1)), '$.fields.Customerid') = 'AutomationRuleSet'; 

Другое решение:

Используйте JSON_TABLE и создать таблицу с полем JSon

+0

Вам не обязательно это делать. Вы все еще получали ошибку с 'json format', добавленным к вызовам функций? –