create or replace procedure CMS_TO_ESB_INTEGRAL is
--调用ESB积分错误是重发接口
http_req utl_http.req;
http_resp utl_http.resp;
request_env clob;
l_replyline varchar2(2000);
response_xml varchar2(2000);
r_ret_status varchar2(20);
errorException exception;
errorCode number;
errorMsg varchar2(1000);
l_body_len number;
l_offset number;
l_max_buffer_len number := 255;
l_buffer varchar2(500);
begin
--查询业务数据 可不要
FOR REMIN_LIST IN(
select a.again_id,a.mobile,a.point_operation,to_char(a.create_date,'yyyy-MM-dd hh24:mi:ss') createTime,
a.points,a.order_no,a.again_num
FROM 表名 a
where a.isenabled = 3 and a.again_num < 5
)
LOOP
--请求报文
request_env := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.sxqc.com/osb/Sale/DSBonus/Ds/Schema/v1.0-Get">
<soapenv:Header/>
<soapenv:Body>
<v1:Request>
<v1:RequestCollections>
<v1:RequestCollection>
<v1:MbrMobile>'|| REMIN_LIST.mobile ||'</v1:MbrMobile>
<v1:PointOperation>'|| REMIN_LIST.point_operation ||'</v1:PointOperation>
<v1:CreateTime>'|| REMIN_LIST.createTime ||'</v1:CreateTime>
<v1:Points>'|| REMIN_LIST.points ||'</v1:Points>
<v1:OrderNo>'|| REMIN_LIST.order_no ||'</v1:OrderNo>
</v1:RequestCollection>
</v1:RequestCollections>
</v1:Request>
</soapenv:Body>
</soapenv:Envelope>';
http_req := utl_http.begin_request('http:/.......yncProxy?wsdl',
'POST',
utl_http.HTTP_VERSION_1_1);
utl_http.set_authentication(http_req, '账号', '密码');
utl_http.set_persistent_conn_support(http_req, TRUE);
utl_http.set_header(http_req, 'Content-Type', 'text/xml;charset=utf-8');
utl_http.set_header(http_req, 'SOAPAction', '');
utl_http.set_body_charset(http_req, 'utf-8');
utl_http.set_header(http_req, 'Content-Length',dbms_lob.getlength(request_env));
l_body_len := dbms_lob.getlength(request_env);
--打印请求报文信息
l_offset := 1;
l_buffer := NULL;
WHILE l_offset < l_body_len loop
dbms_lob.read(lob_loc => request_env
,amount => l_max_buffer_len
,offset => l_offset
,buffer => l_buffer);
l_offset := l_offset + l_max_buffer_len;
utl_http.write_text(http_req, l_buffer);
dbms_output.put_line(l_buffer);
END LOOP;
http_resp := utl_http.get_response(http_req);
utl_http.read_text(http_resp, l_replyline);
utl_http.end_response(http_resp);
response_xml := l_replyline;
response_xml := replace(response_xml,'soapenv:','');
response_xml := replace(response_xml,'soap:','');
response_xml := replace(response_xml,'ns2:','');
--解析返回报文
SELECT RET_STATUS INTO r_ret_status
FROM XMLTABLE('$B/Envelope/Body/Response' PASSING
XMLTYPE(response_xml) AS B COLUMNS
RET_STATUS VARCHAR2(50) PATH '/Response/L_RET_STATUS',
RET_MESSAGE VARCHAR2(50) PATH '/locationResp/L_RET_MESSAGE');
--处理业务
IF r_ret_status = 'E' THEN
UPDATE 表名 SET AGAIN_NUM = REMIN_LIST.again_num+1 WHERE AGAIN_ID = REMIN_LIST.again_Id;
ELSE
DELETE FROM 表名 WHERE AGAIN_ID = REMIN_LIST.again_Id;
END IF;
response_xml := l_replyline;
COMMIT;
END LOOP;
EXCEPTION
when errorException then
utl_http.end_response(http_resp);
errorCode := SQLCODE;
errorMsg := SUBSTR(SQLERRM, 1, 200);
r_ret_status := 'E';
response_xml := 'l_ret_status=' || r_ret_status || ',errorCode=' ||
errorCode || ',errorMsg=' || errorMsg;
when others then
utl_http.end_response(http_resp);
errorCode := SQLCODE;
errorMsg := SUBSTR(SQLERRM, 1, 200);
r_ret_status := 'E';
response_xml := 'l_ret_status=' || r_ret_status || ',errorCode=' ||
errorCode || ',errorMsg=' || errorMsg;
end CMS_TO_ESB_INTEGRAL;