我正在尝试调用/使用一个返回静态字符串的Web服务。下面的代码在执行时抛出了一个错误(滚动到下面)。感谢帮助。
Oracle版本:12.2.0.1
已设置Oracle Wallet,UTL_HTTP、UTL_SMTP、UTL_TCP存在执行权限
对URL进行了置乱,实际的URL确实返回静态字符串
CREATE OR REPLACE FUNCTION WS_TST
RETURN VARCHAR2
IS
v_req UTL_HTTP.req;
v_resp UTL_HTTP.resp;
v_msg VARCHAR2 (32767);
v_entire_msg VARCHAR2 (32767) := NULL;
v_RR NUMBER;
v_wallet_path VARCHAR2 (32767);
--v_url VARCHAR2(32767) := 'https://dcaopppm.com/RecalcSer/api/AT/RR?stat=3&Do=01/01/2015&SType=P&Dob=01/01/1990';
BEGIN
v_wallet_path := 'file:/u01/app/oracle/admin/DEVDBINST/wallet';
UTL_HTTP.set_wallet (v_wallet_path, NULL);
v_req := UTL_HTTP.begin_request (url => v_url, method => 'GET');
v_resp := UTL_HTTP.get_response (r => v_req);
BEGIN
LOOP
UTL_HTTP.read_text (r => v_resp, data => v_msg);
v_entire_msg := v_entire_msg || v_msg;
DBMS_OUTPUT.PUT_LINE ('v_entire_msg: ' || v_entire_msg);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body
THEN
NULL;
END;
v_entire_msg := REPLACE (v_entire_msg, CHR (13));
v_entire_msg := REPLACE (v_entire_msg, CHR (10));
v_entire_msg :=
REPLACE (v_entire_msg, '<?xml version="1.0" encoding="utf-8"?>');
v_entire_msg :=
REPLACE (v_entire_msg,
'<double xmlns="http://www.webservicex.net/">');
v_entire_msg := REPLACE (v_entire_msg, '</double>');
DBMS_OUTPUT.put_line ('v_entire_msg: ' || v_entire_msg);
BEGIN
v_RR := TO_CHAR (v_entire_msg);
EXCEPTION
WHEN OTHERS
THEN
v_RR := NULL;
END;
UTL_HTTP.end_response (r => v_resp);
RETURN v_RR;
END WS_TST;
执行时出错:
Error at line 1
ORA-29273: HTTP request failed
ORA-28759: failure to open file
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1127
1条答案
按热度按时间ohtdti5x1#
问题就在这两行:
请确保您的wallet确实在此存储库中。请记住,这应该指向wallet所在的文件夹,而不是wallet文件本身。还要确保wallet文件名为
ewallet.p12
。如果一切就绪,请确保您的钱包上实际上没有密码。
最后我想到的是你的数据库无法读取这个文件夹。试着也授予这个文件夹的读取权限。
这是过去对我有效的方法。请务必回来反馈是否有效!祝你好运!