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;
Oracle數據庫對接WebAPI接口並解析JSON
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.