#json #oracle #plsql #oracle-apex
#json #Oracle #plsql #oracle-apex
Вопрос:
Редактировать — oracle версии 19c
Я загружаю файл json, используя тип файла просмотра в APEX, а затем сохраняю его в таблице как большой двоичный объект. Таблица выглядит следующим образом —
File_ID Filename Mime_type created_on blob_content
1 file_new.json application/json 9/1/2020 (BLOB)
Теперь я хочу проанализировать это и прочитать содержимое большого двоичного объекта в виде таблицы в oracle. Как я могу это сделать?
Файл Json выглядит примерно так, но содержит сотни строк.
[{"Id":"50021","eName":"random123", "Type":"static","Startdate":"07/03/2020","Enddate":"08/02/2020,"nominations":[{"nominationId":"152","nominationMaxCount":7500,"offer":[{"Id":"131","Type":"MONEY","clientId":41,
"stateExclusions":[],"divisionInclusions":["111","116","126","129"]]}]
Комментарии:
1. версия Oracle?
2. @thatjeffsmith — извините, я пропустил это. Это 19c.
3. итак, вы хотите увидеть идентификатор, имя, тип, Startdate…as столбцы, и каждый из них отображается как столбец в строке для вашего SQL? Я предполагаю, что вы также хотите, чтобы массив nominations был каким-то вложенным столбцом?
4. @thatjeffsmith — Да, вы правы. Я хорошо разбираюсь либо в строках, либо в столбцах, поскольку позже я могу изменять формат, который я хочу. Я не могу прочитать только содержимое. Я буду следовать вашим шагам и читать блоги, чтобы узнать, смогу ли я это сделать?
Ответ №1:
Шаг первый — добавьте ограничение проверки IS JSON в свой столбец BLOB_CONTENT.
ALTER TABLE CLOBS
ADD CONSTRAINT CLOB_JSON CHECK
(CLOBS IS JSON)
ENABLE; -- yes my table name and my column are both named CLOBS
Шаг второй — добавьте некоторые данные.
База данных предоставляет собственные вызовы SQL для анализа / запроса содержимого JSON в вашем большом двоичном объекте.
Мои данные, одна строка. В этом документе JSON есть несколько простых массивов.
{
"results" : [
{
"columns" : [
{
"name" : "REGION_ID",
"type" : "NUMBER"
},
{
"name" : "REGION_NAME",
"type" : "VARCHAR2"
}
],
"items" : [
{
"region_id" : 1,
"region_name" : "Europe"
},
{
"region_id" : 2,
"region_name" : "Americas"
},
{
"region_id" : 3,
"region_name" : "Asia"
},
{
"region_id" : 4,
"region_name" : "Middle East and Africa"
}
]
}
]
}
Я могу использовать функцию jsonv_value(), если я хочу извлечь один атрибут, и я могу ссылаться на них, используя $. notation . Я ссылаюсь на массивы, как и следовало ожидать.
select json_value(CLOBS,'$.results.columns[0].name') FIRST_COLUMN,
json_value(CLOBS,'$.results.columns[1].name') SECOND_COLUMN
from CLOBS
where ID = 1;
У нашего архитектора продукта (Beda) есть отличная серия блогов с гораздо лучшими примерами, чем этот.
Комментарии:
1. Спасибо. Я обновил вопрос примером моего файла json
2. у меня сейчас нет времени возвращаться назад, возможно, это сделает кто-то другой, но прочитайте эти сообщения от Беды, у него есть примеры именно того, что вы хотите.