zoukankan      html  css  js  c++  java
  • Oracle数据库对接WebAPI接口并解析JSON

    CREATE OR REPLACE PROCEDURE Get_Mall_Customer_Balance(Xv_Ret_Status     OUT VARCHAR2
                                                         ,Xv_Ret_Message    OUT VARCHAR2
                                                         ,Xn_Cust_Balance   OUT NUMBER
                                                         ,Pn_Org_Id         IN NUMBER
                                                         ,Pn_Cust_Acct_Id   IN NUMBER
                                                         ,Pn_Bussiness_Flag IN NUMBER) IS
    
      -- 常量定义
      Lv_Proc_Name  CONSTANT VARCHAR2(50) := 'Refund_Validate_From_Mall'; -- 方法名
      Lv_Webapi_Url CONSTANT VARCHAR2(240) := 'http://xxx.xxx.xx.x:7001/ErpWsApp/jersey/ErpWsAppService/ErpGetCustomerBalance'; --WebAPI
    
      -- 变量定义
      Lv_Para_Content   VARCHAR2(1000);
      Lraw_Para_Content RAW(32767);
      Req               Utl_Http.Req;
      Resp              Utl_Http.Resp;
      Lv_Replyline      VARCHAR2(4000);
      Lv_Respond        VARCHAR2(32767); --返回报文
      Lj_Respond        Json;
      --
      Lv_Count      VARCHAR2(30);
      Lv_Status     VARCHAR2(30);
      Lv_Msg        VARCHAR2(30);
      Array_Data    Json_List;
      Jsonobj       Json;
      Lv_Meaning    VARCHAR2(30);
      Lv_Ebscustid  VARCHAR2(30);
      Lv_Lineamount VARCHAR2(30);
    
    BEGIN
      ------------
      -- 初始化变量
      ------------
      Xv_Ret_Status  := Fnd_Api.g_Ret_Sts_Success; -- 返回状态
      Xv_Ret_Message := NULL; -- 返回消息
    
      --接口参数串拼接
      Lv_Para_Content := '{"OU_ID":"' || Pn_Org_Id || '","EBS_CUST_ID":"' || Pn_Cust_Acct_Id ||
                         '","BUSINESS_FLAG":"' || Pn_Bussiness_Flag || '"}';
    
      --Lv_Para_Content := '{"OU_ID":"130","EBS_CUST_ID":"4040","Business_Flag":"4"}';
    
      -----------
      --主程序开始
      -----------
      Utl_Http.Set_Transfer_Timeout(300);
    
      Req := Utl_Http.Begin_Request(Lv_Webapi_Url --地址URL
                                   ,'POST' --调用方式
                                   ,Utl_Http.Http_Version_1_1); --http_version调用版本
    
      -- 保持连接状态
      Utl_Http.Set_Persistent_Conn_Support(Req, TRUE);
    
      --设置编码
      Utl_Http.Set_Header(Req, 'Content-Type', 'application/json;charset=UTF-8');
      Utl_Http.Set_Header(Req, 'Content-Length', Length(Lv_Para_Content));
      --
      Utl_Http.Write_Text(Req, Lv_Para_Content); --通过body发送消息
      --
      Resp := Utl_Http.Get_Response(Req);
    
      IF (Resp.Status_Code = Utl_Http.Http_Ok) THEN
        --
        BEGIN
          LOOP
            Utl_Http.Read_Line(Resp, Lv_Replyline, TRUE);
            Lv_Respond := Lv_Respond || Lv_Replyline;
          END LOOP;
          Utl_Http.End_Response(Resp);
        EXCEPTION
          WHEN Utl_Http.End_Of_Body THEN
            Utl_Http.End_Response(Resp);
        END;
      
      ELSE
        Xv_Ret_Status  := Fnd_Api.g_Ret_Sts_Error; -- 返回状态
        Xv_Ret_Message := '接口调用异常' || SQLERRM; -- 返回消息
      END IF;
    
      --开始解析返回的Json串
      Lj_Respond := Json(Lv_Respond);
      --获取第一层json值
      Lv_Count  := Json_Ext.Get_String(Lj_Respond, 'count');
      Lv_Status := Json_Ext.Get_String(Lj_Respond, 'status');
      Lv_Msg    := Json_Ext.Get_String(Lj_Respond, 'msg');
      --
      Array_Data := Json_List();
      Array_Data := Json_Ext.Get_Json_List(Lj_Respond, 'data');
      --
      FOR i IN 1 .. Array_Data.Count LOOP
        --
        Jsonobj := Json(Array_Data.Get(i));
        --
        Lv_Meaning    := Json_Ext.Get_String(Jsonobj, 'Meaning');
        Lv_Ebscustid  := Json_Ext.Get_String(Jsonobj, 'EbsCustId');
        Lv_Lineamount := Json_Ext.Get_String(Jsonobj, 'LineAmount');
      END LOOP;
      --
      Xn_Cust_Balance := To_Number(Lv_Lineamount);
    EXCEPTION
      WHEN OTHERS THEN
        Xv_Ret_Status  := Fnd_Api.g_Ret_Sts_Error;
        Xv_Ret_Message := Lv_Proc_Name || '时发生异常:' || SQLERRM;
        --
        Xn_Cust_Balance := 0;
      
    END;
    
    
  • 相关阅读:
    R语言 实验三 数据探索和预处理
    Java学习——包及可见性
    Java学习——包及可见性
    Java学习——使用Static修饰符
    Java学习——使用Static修饰符
    CSDN也有我的博客啦
    将博客搬至CSDN
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现...
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)
  • 原文地址:https://www.cnblogs.com/ruicccc/p/13227702.html
Copyright © 2011-2022 走看看