oracle 连接 web service (利用soap_api)

来源:互联网 发布:闰秒 知乎 编辑:程序博客网 时间:2024/05/29 19:50

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;


0 0