Я создал следующий script, чтобы читать данные из базы данных мобильных приложений (которая основана на MongoDB) от Oracle SQL Developer:
DECLARE
l_param_list VARCHAR2(512);
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_response_text VARCHAR2(32767);
BEGIN
-- service input parameters
-- preparing Request...
l_http_request := UTL_HTTP.begin_request ('https://api.appery.io/rest/1/db/collections/Photos?where=%7B%22Oracle_Flag%22%3A%22Y%22%7D'
, 'GET'
, 'HTTP/1.1');
-- ...set header attributes
UTL_HTTP.set_header(l_http_request, 'X-Appery-Database-Id', '53f2dac5e4b02cca64021dbe');
--UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(l_param_list));
-- ...set input parameters
-- UTL_HTTP.write_text(l_http_request, l_param_list);
-- get Response and obtain received value
l_http_response := UTL_HTTP.get_response(l_http_request);
UTL_HTTP.read_text(l_http_response, l_response_text);
DBMS_OUTPUT.put_line(l_response_text);
insert into appery values(l_response_text);
-- finalizing
UTL_HTTP.end_response(l_http_response);
EXCEPTION
WHEN UTL_HTTP.end_of_body
THEN UTL_HTTP.end_response(l_http_response);
END;
/
Ответ (l_response_text) представляет собой JSON-подобную строку. Например:
[{"Postcode":"47100","OutletCode":"128039251","MobileNumber":"0123071303","_createdAt":"2014-11-10 06:12:49.837","_updatedAt":"2014-11-10 06:12:49.837"}, {"Postcode":"32100","OutletCode":"118034251", ..... ]
Код работает нормально и вставляет ответ в одну таблицу столбцов appery. Однако мне нужно проанализировать этот ответ таким образом, чтобы каждый массив попадал в его конкретный столбец в таблице appery_test. Таблица appery_test имеет несколько столбцов, таких же, как количество пар JSON и в том же порядке.
Я искал и нашел большинство результатов о разборе таблицы Oracle в JSON, а не наоборот. Я нашел, однако, эту ссылку, которая несколько похожа на мою проблему. Однако в предлагаемой библиотеке ответа нет примера о том, как использовать его для вставки JSON в обычную таблицу с использованием PL/SQL.
N.B.: Я использую 11g, а не 12c. Поэтому функции встроенные недоступны для меня.