现在已经调通了,代码如下:
CREATE OR REPLACE PROCEDURE PRC_TEST_WEBSERVICE(p_i number,p_job_id number,p_monitor_id number,p_unit_id number,p_wsdl_url VARCHAR2)
AS
l_service UTL_DBWS.service;
l_call UTL_DBWS.call;
l_result ANYDATA;
v_error_msg VARCHAR2(1000 CHAR);
l_wsdl_url VARCHAR2(1024);
l_service_name VARCHAR2(200);
l_operation_name VARCHAR2(200);
l_input_params UTL_DBWS.anydata_list;
BEGIN
--l_wsdl_url := 'http://192.168.248.87:8090/test/services/testfordispatch.jws?WSDL';
--l_service_name := 'testfordispatchService';
--l_operation_name := 'TaskUnitProgMonitor';
l_wsdl_url:='http://'||p_wsdl_url||'/framework/services/OracleCallJava.jws?wsdl';
--l_service_name:=p_service_name;
l_operation_name:='runJob';
l_service := UTL_DBWS.create_service (
wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
service_name => NULL);
l_call := UTL_DBWS.create_call (
service_handle => l_service,
port_name => NULL,
operation_name => l_operation_name);
l_input_params(0) := ANYDATA.CONVERTNUMBER(p_job_id);
l_input_params(1) := ANYDATA.CONVERTNUMBER(p_unit_id);
l_input_params(2) := ANYDATA.CONVERTNUMBER(p_monitor_id);
l_result := UTL_DBWS.invoke (
call_handle => l_call,
input_params => l_input_params);
UTL_DBWS.release_call (call_handle => l_call);
UTL_DBWS.release_service (service_handle => l_service);
--dbms_output.put_line(ANYDATA.AccessVarchar2(l_result));
--p_result:='S|'||ANYDATA.AccessVarchar2(l_result);
EXCEPTION
WHEN OTHERS THEN
--dbms_output.put_line(SQLERRM);
--p_result:='F|'||ANYDATA.AccessVarchar2(l_result);
v_error_msg:='内部错误:'||substr(SQLERRM,1,1000);
INSERT INTO tb_job_monitor_errmsg(monitor_id,task_id,unit_id,err_msg,monitor_dt)
VALUES(p_monitor_id,p_job_id,p_unit_id,v_error_msg,SYSDATE);
update tb_job_monitor set end_date=sysdate,status='CF' where ID=p_monitor_id and unit_id=p_unit_id;
COMMIT;
gpdic_tb_invoke_job.create_sub_job(p_i,p_unit_id,p_job_id,p_monitor_id);
END;
但还有一个问题就是,如果主机不存在,或者关机的话,这个要等7-8分钟的时间,才返回错误消息,我想设置超时时间短一些,不知道这里有没有什么方法可以设置。