您的位置:首页 > 数据库 > Oracle

oracle 连接 web service (利用soap_api)

2015-11-23 14:05 666 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: