2016-08-26 1 views
0

웹 서비스에서 JSON 응답을 받고 있습니다. JSON 데이터를 PL/SQL 변수로 추출하려고합니다. 수있는 방법을 설명해 주실 수 있습니까?CLOB JSON 데이터를 Oracle의 지역 변수로 추출

미리 감사드립니다.

+1

버전을 배포? 12c에는 기본 JSON 처리 기능이 있습니다. 이전 버전에서는 [PL/JSON] (https://github.com/pljson/pljson/)을 사용해 볼 수 있습니다. –

+0

12c 버전을 사용하고 있습니다. 요구 사항 때문에 PL/JSON 또는 APEX를 사용할 수 없습니다. 라이브러리없이 PL/SQL에서 어떻게하면됩니까? – Rohit

+0

12c를 사용하고 있다면 호크가 이미 답변에 링크되어 있으므로 내장 [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