Как выбрать подстроку из поля BLOB-объекта Oracle - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно получить часть поля BLOB-объекта, содержащего некоторые данные JSON. одна часть капли похожа на это CustomData:{HDFC;1;0;sent}. Мне нужны отдельные значения после CustomData, такие как HDFC, 1, 0, отправленные отдельно.

Это то, что я пробовал в двух отдельных запросах, которые работают:

Это дает мне индекс CustomData в поле payment_data blob, например, возвращает 11000

select dbms_lob.instr(payment_data, utl_raw.cast_to_raw('CustomData')) 
from table_x;  

Я указываю 3-й параметр как первый возвращенный запрос + длина теста CustomData:, чтобы получить {HDFC;1;0;sent}

select UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(payment_data,1000,11011)) 
from table_x; 

Проблема в том, что мне нужно принять динамическое смещение во 2-м запросе, а не запускать 1-й запрос как отдельный. Задание динамического смещения не работает с функцией dbms_lob.substr (). Любые предложения, как я могу объединить эти два запроса в один?

Как только я получу {HDFC;1;0;sent}, мне также нужно получить эти разделенные значения отдельно, поэтому объединение этих трех в одно было бы даже лучше, если бы кто-то мог помочь с этим. Я могу использовать regexp_substr, чтобы получить текст с разделителями, как только я получу первые два вместе.

1 Ответ

0 голосов
/ 08 мая 2019
  1. Если вы хотите сначала извлечь текстовые данные из BLOB-объекта, вам нужно преобразовать их в Clob с помощью dbms_lob.converttoclob.
  2. Если у вас Oracle 12c или выше, вы можете использовать функции JSON SQL, например: JSON_TABLE .
  3. Если ваша версия Oracle находится между 10 и 11, вы можете использовать функции регулярного выражения или instr + substr, если ваша версия меньше 10.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...