使用UTL_HTTP函数包请求Web服务端时发生异常报错:ORA-29259:输入结束,该如何解决?
ORA-29273: HTTP request failed ORA-29259: end-of-input reached ORA-06512: at "SYS.UTL_HTTP", line 1491
代码如下: SELECT utl_http.request('http://172.168.9.218:8080/BusiServer?action=run_proc&token=&action=Download') FROM dual;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到使用UTL_HTTP函数包请求Web服务端时出现ORA-29259错误,通常意味着在尝试读取HTTP响应时遇到了意外的结束,可能是由于网络问题、服务器未正确响应或者请求参数不正确等原因导致。以下是一些可能的解决步骤:
检查URL是否正确:首先确认请求的URL是否正确无误,包括端口号和路径。在您的例子中是http://172.168.9.218:8080/BusiServer?action=run_proc
,请确保该地址可以正常访问,并且后端服务正在运行。
检查网络连接:确认数据库服务器与目标Web服务器之间的网络连接是通畅的。可以尝试从数据库服务器上使用ping命令测试目标IP的连通性。
查看Web服务端日志:检查Web服务端的日志,看是否有接收到请求以及处理请求时的错误信息,这有助于定位问题所在。
设置超时时间:在请求中增加超时时间设置,以避免因等待响应过长而导致的问题。可以通过UTL_HTTP.SET_TIMEOUT
过程来设置连接、读取或传输的超时时间。
UTL_HTTP.SET_TIMEOUT(utl_http.connection_timeout, 60); -- 设置连接超时为60秒
UTL_HTTP.SET_TIMEOUT(utl_http.read_timeout, 120); -- 设置读取超时为120秒
增加错误处理逻辑:在PL/SQL代码中增加异常处理部分,以便于捕获并记录更详细的错误信息,帮助诊断问题。
DECLARE
req utl_http.req;
res utl_http.resp;
url VARCHAR2(200) := 'http://172.168.9.218:8080/BusiServer?action=run_proc';
buffer VARCHAR2(32767);
BEGIN
req := utl_http.begin_request(url, 'GET');
-- 这里添加其他请求设置
res := utl_http.get_response(req);
LOOP
utl_http.read_line(res, buffer);
EXIT WHEN buffer IS NULL;
-- 处理响应数据
END LOOP;
utl_http.end_response(res);
EXCEPTION
WHEN utl_http.end_of_body THEN
dbms_output.put_line('End of input reached normally.');
WHEN OTHERS THEN
dbms_output.put_line('An error occurred: ' || SQLERRM);
-- 可以考虑记录到日志表或其他更详细的错误处理
END;
检查防火墙和安全组设置:确保没有防火墙或安全组规则阻止了从数据库服务器到Web服务端的请求。
如果以上步骤都无法解决问题,可能需要进一步分析网络环境、数据库配置或Web服务端的具体实现细节。