2016-08-26 11 views
0

WebサービスからJSON応答を取得しています。私はそのJSONデータをPL/SQL変数に抽出したいと思います。どうすればそれを達成できますか?CLOB JSONデータをOracleのローカル変数に抽出する

ありがとうございます。

+1

のOracleのバージョンを展開しますか? 12cには、JSONのネイティブ処理があります。以前のバージョンでは、[PL/JSON](https://github.com/pljson/pljson/)を試すことができます。 –

+0

私は12cバージョンを使用しています。要件のためにPL/JSONまたはAPEXを使用することはできません。 PL/SQLからライブラリなしでどのように達成できますか? – Rohit

+0

12cを使用している場合は、Hawkがすでにその回答にリンクしているように、組み込みの[JSON handling](https://docs.oracle.com/database/121/ADXDB/json.htm#ADXDB6246)を使用してください。 –

答えて

1

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 ..... 
+0

私は両方のツールを認識しています。しかし、APEXやPL/JSONを実稼働環境にインストールすることはできません。私はネイティブPL/SQLコードからのみこれを達成する必要があります。私は12cデータベース版を使用しています。 – Rohit

関連する問題