如何从 PL/SQL 过程中访问 http URL?
Posted
技术标签:
【中文标题】如何从 PL/SQL 过程中访问 http URL?【英文标题】:How to hit a http URL from PL/SQL procedure? 【发布时间】:2017-01-23 13:33:46 【问题描述】:Oracle Database 12c 企业版 12.1.0.2.0 - 64 位生产
我正在创建一个 Oracle 作业,我需要每 30 分钟执行一次程序,
在程序内部,我想点击一个 HTTP URL,以便在后面执行一个 java 程序。
方法:
declare
req UTL_HTTP.REQ;
BEGIN
req := UTL_HTTP.BEGIN_REQUEST('http://dev.xxx.com/yyy/zzz/aaa/triggerJob');
dbms_output.put_line('hitting');
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
dbms_output.put_line('exception');
END;
DBMS OUTPUT 命中
-- 但实际上并没有击中!
方法 2
declare
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
BEGIN
req := UTL_HTTP.BEGIN_REQUEST('http://dev.xxx.com/yyy/zzz/aaa/triggerJob');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
resp := UTL_HTTP.GET_RESPONSE(req);
UTL_HTTP.END_RESPONSE(resp);
dbms_output.put_line('hitting');
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
dbms_output.put_line('exception');
END;
有了这个,我在执行时遇到了错误。
【问题讨论】:
您使用的是哪个版本的 Oracle?您是否授予了相关的访问权限? @APC Oracle Database 12c 企业版,是的,我拥有所有权限。读/写/更新/插入和 ACL 也是如此。 大概你已经测试了通过一些普通的网络服务机制,SOAPUI 向 URL 发送一个 GET 请求? @APC 我在浏览器“dev.xxx.com/yyy/zzz/aaa/triggerJob”中点击 URL,它绝对可以正常工作。 @APC 任何线索。 【参考方案1】:考虑添加get_response
来实际执行请求;否则它只准备好了;);另一个好的做法是设置 http 标头...
declare
req UTL_HTTP.REQ;
BEGIN
req := UTL_HTTP.BEGIN_REQUEST('http://dev.xxx.com/yyy/zzz/aaa/triggerJob');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.GET_RESPONSE(req);
dbms_output.put_line('hitting');
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
dbms_output.put_line('exception');
END;
更多内容在Oracle documentation
【讨论】:
请在上述更新的问题中检查方法 2(由您建议)。 所以这意味着你必须打开另一个问题。第一个问题是解决。现在你必须做一些事情来让你的数据库能够访问远程服务器(是真的http,还是https??) 是 HTTP:// 请求。以上是关于如何从 PL/SQL 过程中访问 http URL?的主要内容,如果未能解决你的问题,请参考以下文章