Я создал следующий 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. Поэтому функции встроенные недоступны для меня.