将CLOB JSON数据提取到Oracle中的本地变量中

时间:2016-08-26 10:42:12

标签: json oracle web-services plsql clob

我从Web服务获得JSON响应。我想将JSON数据提取到PL / SQL变量中。你可以解释我怎么能实现这个目标?

提前致谢。

2 个答案:

答案 0 :(得分: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 .....

答案 1 :(得分:0)

我实施了以下解决方案。它适用于12c版本的数据库,无需使用任何第三方工具/库。

https://docs.oracle.com/database/122/ADJSN/json-in-oracle-database.htm#ADXDB6371

部署生产中的更改:)