【问题标题】:How to hit a http URL from PL/SQL procedure?如何从 PL/SQL 过程中访问 http URL?
【发布时间】: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 任何线索。

标签: oracle plsql


【解决方案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:// 请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 2021-09-04
  • 1970-01-01
  • 2015-10-23
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多