ORACLE 自 9i 起,允许使用 UTL_HTTP 包进行访问网络,可以直接在 ORACLE 中发起 WEB SERVICE 调用,经测试该方法在oracle 10g中同样适用
1 首先导入 soap_api 包 。 该包也可在在 http://www.oracle-base.com/dba/miscellaneous/soap_api.sql 下载
2 准备调用web service,可以写成函数,也可以写成过程等等
CREATE OR REPLACE FUNCTION FUN_getIPAddress(v_IPAddress IN VARCHAR)
RETURN VARCHAR AS
l_request soap_api.t_request;
l_response soap_api.t_response;
v_return VARCHAR2(32767); -- 返回结果
v_url VARCHAR2(32767); -- Web Service 地址
v_namespace VARCHAR2(32767); -- Web Service 命名空间
v_method VARCHAR2(32767); -- 调用 Web Service 的方法
v_soap_action VARCHAR2(32767); -- soapAction
v_result_name VARCHAR2(32767); -- 返回结果参数名
BEGIN
-- 生成request对象
l_request := soap_api.new_request(p_method => v_method,
p_namespace => v_namespace);
-- 向入参中加入参数,如果有多个参数,会有多个 soap_api.add_parameter
soap_api.add_parameter(p_request => l_request,
p_name => 'RequestIP', -- 参数名字,可以在Web Service 中找到,一般在 element name=方法名 节点找到
p_type => 's:string', -- 参数类型,可以在Web Service 中找到,一般在 element name=方法名 节点 type="s:string" 找到
p_value => v_IPAddress);
-- 调用执行 Web Service 方法
l_response := soap_api.invoke(p_request => l_request,
p_url => v_url,
p_action => v_soap_action);
-- 获取返回值
v_return := soap_api.get_return_value(p_response => l_response,
p_name => v_result_name,
p_namespace => v_namespace);
EXCEPTION
WHEN OTHERS THEN
v_return := 'Error' || sqlerrm;
END;
RETURN v_return;
END;
/
show error;
3 完成后,测试即可
select FUN_getIPAddress('61.128.114.133') as IPArea from dual;