WebサービスからJSON応答を取得しています。私はそのJSONデータをPL/SQL変数に抽出したいと思います。どうすればそれを達成できますか?CLOB JSONデータをOracleのローカル変数に抽出する
ありがとうございます。
WebサービスからJSON応答を取得しています。私はそのJSONデータをPL/SQL変数に抽出したいと思います。どうすればそれを達成できますか?CLOB JSONデータをOracleのローカル変数に抽出する
ありがとうございます。
以下のソリューションを実装しました。サードパーティのツール/ライブラリを使用せずに12cバージョンのデータベースで動作しました。
https://docs.oracle.com/database/122/ADJSN/json-in-oracle-database.htm#ADXDB6371
は、生産の変化:)
Alex Pooleがこのコメントで述べたように、Oracle 12cを使用している場合は、JSONの作成と読み取りをサポートする豊富な機能が用意されています。以前のバージョンで稼動していてOracle APEX 5.0以上がインストールされていても(それをインストールすることはできますが、無料です)、豊富なAPEX_JSONパッケージとそれが提供する類似の機能を利用できます。
ただし、両方のオプションが利用できない場合は、PL/SQLパッケージのスイートにすることができます。以下は、インストール後にそれらを使用する方法を示す簡単なスニペットです。
DECLARE
l_param_list VARCHAR2(512);
l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_response_text VARCHAR2(32767);
l_list json_list; --json array type
A_id VARCHAR2(200);
UserId VARCHAR2(100);
UserName VARCHAR2(100);
OutletCode VARCHAR2(100);
OutletName VARCHAR2(100);
MobileNumber VARCHAR2(100);
PhoneNumber VARCHAR2(100);
Address VARCHAR2(100);
City VARCHAR2(100);
State VARCHAR2(100);
Postcode VARCHAR2(100);
Email VARCHAR2(100);
UpdateCount VARCHAR2(100);
loginCount VARCHAR2(100);
ReferencePhoto VARCHAR2(100);
Updates VARCHAR2(100);
AccountLocked VARCHAR2(100);
Oracle_Flag VARCHAR2(100);
acl VARCHAR2(100);
BEGIN
-- preparing Request...
l_http_request := UTL_HTTP.begin_request('/*your GET service URL here*/'
, 'GET'
, 'HTTP/1.1');
-- ...set header's attributes
UTL_HTTP.set_header(l_http_request, '/*header name*/', '/*header value*/');
-- ...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);
l_list := json_list(l_response_text); -- get json response here
--loop through JSON response array:
FOR i IN 1..l_list.count
LOOP
A_id := json_ext.get_string(json(l_list.get(i)),'_id');
UserId := json_ext.get_string(json(l_list.get(i)),'UserId');
UserName := json_ext.get_string(json(l_list.get(i)),'UserName');
OutletCode := json_ext.get_string(json(l_list.get(i)),'OutletCode');
OutletName := json_ext.get_string(json(l_list.get(i)),'OutletName');
MobileNumber := json_ext.get_string(json(l_list.get(i)),'MobileNumber');
PhoneNumber := json_ext.get_string(json(l_list.get(i)),'PhoneNumber');
Address := json_ext.get_string(json(l_list.get(i)),'Address');
City := json_ext.get_string(json(l_list.get(i)),'City');
State := json_ext.get_string(json(l_list.get(i)),'State');
Postcode := json_ext.get_string(json(l_list.get(i)),'Postcode');
Email := json_ext.get_string(json(l_list.get(i)),'Email');
UpdateCount := json_ext.get_string(json(l_list.get(i)),'UpdateCount');
loginCount := json_ext.get_string(json(l_list.get(i)),'loginCount');
ReferencePhoto := json_ext.get_string(json(l_list.get(i)),'ReferencePhoto');
Updates := json_ext.get_string(json(l_list.get(i)),'Updates');
AccountLocked := json_ext.get_string(json(l_list.get(i)),'AccountLocked');
Oracle_Flag := json_ext.get_string(json(l_list.get(i)),'Oracle_Flag');
acl := json_ext.get_string(json(l_list.get(i)),'acl');
--insert into your table
insert .....
私は両方のツールを認識しています。しかし、APEXやPL/JSONを実稼働環境にインストールすることはできません。私はネイティブPL/SQLコードからのみこれを達成する必要があります。私は12cデータベース版を使用しています。 – Rohit
のOracleのバージョンを展開しますか? 12cには、JSONのネイティブ処理があります。以前のバージョンでは、[PL/JSON](https://github.com/pljson/pljson/)を試すことができます。 –
私は12cバージョンを使用しています。要件のためにPL/JSONまたはAPEXを使用することはできません。 PL/SQLからライブラリなしでどのように達成できますか? – Rohit
12cを使用している場合は、Hawkがすでにその回答にリンクしているように、組み込みの[JSON handling](https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6246)を使用してください。 –