2016-11-22 289 views
-1
http_req := utl_http.begin_request(t_url,'POST', 

utl_http.http_version_1_1); 
utl_http.set_header(http_req, 'Content-Type', t_content_type); 
utl_http.set_header(http_req, 'Content-Length', length(soap_request)); 
utl_http.set_header(http_req, 'SOAPAction', 'http://tempuri.org/IService/GetActive'); 
utl_http.write_text(http_req, soap_request);http_resp := utl_http.get_response(http_req); 
Utl_Http.read_text(http_resp, response_env,32767);dbms_lob.createtemporary(x_clob, false); 
bms_lob.OPEN(x_clob, dbms_lob.lob_readwrite); 
BEGIN 
    loop utl_http.read_text(http_resp, l_buffer); 
    dbms_lob.writeappend(x_clob, length(l_buffer) , l_buffer); 
    end LOOP; 
EXCEPTION 
WHEN others THEN 
    IF sqlcode <> -29266 then 
    raise; 
    ENDIF; 
END; 
IF(http_resp.status_code = 200) then 
L_RESP_XML:= xmltype(response_env); 

L_RESULTCODE:= l_resp_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultCode/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:b="http://schemas.datacontract.org/2004/07/"').getstringval(); 
L_RESULTDESCRIPTION:= l_resp_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultDescription/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:b="http://schemas.datacontract.org/2004/07/.CRM"').getstringval() 

IF (l_resultcode = '0' AND l_resultdescription = 'Successful') then 
    siebel.idc_ir_xml_processing(response_env, err_code , err_mesg); 
    IF (err_code <> '00') then 
     error_code := err_code;error_desc := err_mesg;raise error_out; 
    ELSE 
     error_code := '00T'; 
     error_desc := l_resultdescription;raise error_out 
    ENDIF; 
ENDIF; 

utl_http.end_response(http_resp); 
error_code := '00'; 
error_desc := 'SUCCESS'; 
EXCEPTION 
    WHEN error_out THEN 
     error_code := error_code;error_desc := error_desc; ---SQLERRM||' Unhandled Exception'; 
    WHEN others THEN 
     error_code := '91';error_desc := sqlerrm || ' Unhandled Exception'; 
    dbms_output.put_line('Error desc:' || error_desc); 
END; 

當我們在做測試時,我們正在調用上面的多個時間過程,它會調用HTTP請求並獲得響應。但是,當我們觸發的大部分時間,我們得到以下錯誤ORA-29273:HTTP請求失敗,ORA-29270:太多的開放式HTTP請求

Error desc:ORA-29273: HTTP request failed 
ORA-06512: at "SYS.UTL_HTTP", line 1130 
ORA-29270: too many open HTTP requests 

讓我們知道什麼是在上述過程中,如何處理所有請求連接應關閉的問題。以及如何確保我們的問題不會受到人們的關注

+0

的可能的複製[ORA-29270:打開太多的HTTP請求(http://stackoverflow.com/questions/1235679/ora-29270-too-many-open-http-requests) –

回答

0

在出現任何異常情況時,始終使用utl_http.end_response關閉打開的連接。

http_req := utl_http.begin_request(t_url,'POST', utl_http.http_version_1_1); 
utl_http.set_header(http_req, 'Content-Type', t_content_type); 
utl_http.set_header(http_req, 'Content-Length', length(soap_request)); 
utl_http.set_header(http_req, 'SOAPAction', 'http://tempuri.org/IService/GetActive'); 
utl_http.write_text(http_req, soap_request); 
http_resp := utl_http.get_response(http_req); 
Utl_Http.read_text(http_resp, response_env,32767); 
dbms_lob.createtemporary(x_clob, false); 
bms_lob.OPEN(x_clob, dbms_lob.lob_readwrite); 
BEGIN 
    loop utl_http.read_text(http_resp, l_buffer); 
    dbms_lob.writeappend(x_clob, length(l_buffer) , l_buffer); 
    end LOOP; 
EXCEPTION 
WHEN others THEN 
    IF sqlcode <> -29266 then 
    raise; 
    ENDIF; 
END; 
IF(http_resp.status_code = 200) then 
L_RESP_XML:= xmltype(response_env); 

L_RESULTCODE:= l_resp_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultCode/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:b="http://schemas.datacontract.org/2004/07/"').getstringval(); 
L_RESULTDESCRIPTION:= l_resp_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultDescription/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/" xmlns:b="http://schemas.datacontract.org/2004/07/.CRM"').getstringval() 

IF (l_resultcode = '0' AND l_resultdescription = 'Successful') then 
    siebel.idc_ir_xml_processing(response_env, err_code , err_mesg); 
    IF (err_code <> '00') then 
     error_code := err_code;error_desc := err_mesg;raise error_out; 
    ELSE 
     error_code := '00T'; 
     error_desc := l_resultdescription;raise error_out 
    ENDIF; 
ENDIF; 

utl_http.end_response(http_resp); 
error_code := '00'; 
error_desc := 'SUCCESS'; 
EXCEPTION 
    WHEN error_out THEN 
     utl_http.end_response(http_resp); 
     error_code := error_code;error_desc := error_desc; ---SQLERRM||' Unhandled Exception'; 
    WHEN others THEN 
     utl_http.end_response(http_resp); 
     error_code := '91';error_desc := sqlerrm || ' Unhandled Exception'; 
    dbms_output.put_line('Error desc:' || error_desc); 

END; 
相關問題