oracle 调用 WebService 服务,简要说明
环境:oracle10g, pl/sql, dbws-callout-utility-10131.zip(java扩展包)
1.去oracle官网上下载dbws-callout-utility-10131.zip
2.解压后放到oracle安装目录下的<oracle_install_dir>/sqlj/lib中;(需要注意,操作角色拥有可写权限)
3.在命令行中利用loadjava命令(一般安装完jdk或oracle之后就会有)将jar包导入oracle对应的用户中:
loadjava -u user/password@oracle -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar
若为SYS用户,命令为:
loadjava -u user/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar
(需要注意,操作角色拥有可写权限)
4.验证java包是否成功加载方法:
在pl/sql中敲入'sys.'若没有 'utl_dbws' 显示,表示未成功,运行之前下载的包中
'dbws-callout-utility-10131/sqlj/lib/ utl_dbws_body.sql'及'utl_dbws_decl.sql'
如果'utl_dbws'显示,表示成功.
5.编写函数
create or replace function FUNC_GENERATE_LOGINNAME(xmlstring1 VARCHAR2)
return VARCHAR2
AS
l_service sys.utl_dbws.SERVICE;
l_call sys.utl_dbws.call;
l_result anydata;
l_wsdl_url varchar2(1024);
l_service_name varchar2(200);
l_operation_name varchar2(200);
l_input_params SYS.UTL_DBWS.anydata_list;
begin
l_wsdl_url:='http://192.168.255.80:8081/ServicePort?wsdl';
l_service_name:='WebServiceImpl';
l_operation_name:='echo';
l_service:=sys.utl_dbws.create_service(wsdl_document_location=>URIFACTORY.getUri(l_wsdl_url),service_name=>l_service_name);
l_call:=sys.utl_dbws.create_call(service_handle=>l_service,port_name=>null,operation_name=>l_operation_name);
--l_input_params(1):= ANYDATA.ConvertVarchar2(xmlstring1);
l_result := sys.UTL_DBWS.invoke(call_handle => l_call,input_params => l_input_params);
sys.utl_dbws.release_call(call_Handle => l_call);
sys.utl_dbws.release_service(service_Handle => l_service);
return anydata.AccessVarchar2(l_result);
exception
when others then
return substr(sqlerrm,0,5000);
END FUNC_GENERATE_LOGINNAME;
其中l_input_params(1):= ANYDATA.ConvertVarchar2(xmlstring1)表示传的第一个参数,如果有多个参数可以类似l_input_params(2):= ANYDATA.ConvertVarchar2(xmlstring2); l_input_params(3):= ANYDATA.ConvertVarchar2(xmlstring3);依此类推!也可以转成其它类型例:ANYDATA.ConvertNumber(xmlstring3)、ANYDATA.ConvertDate(xmlstring2)
6.看结果
select func_generate_loginname('xmlstring1') from dual;
xmlstring1 为入参参数,根据项目需要,建议多个varchar类型最好拼成json格式