有个存储过程,如下,存储过程内部调用到了一个别的存储过程Check_Validate,Check_Validate运行要用十多分钟,我想在Confirm__中只是调用一下Check_Validate,让Check_Validate在后台运行着,用户在界面上不用一直等待Check_Validate运行完成,可以继续干别的事,该如何做呢?
现在有个想法是在Confirm__中调用一个后台的JOB,这个JOB调用Check_Validate,如何?
PROCEDURE Confirm__ (
info_ OUT VARCHAR2,
objid_ IN VARCHAR2,
objversion_ IN OUT VARCHAR2,
attr_ IN OUT VARCHAR2,
action_ IN VARCHAR2 )
IS
rec_ CONTRACT_CHANGE_TAB%ROWTYPE;
BEGIN
General_SYS.Init_Method(lu_name_, 'CONTRACT_CHANGE_API', 'Confirm__');
IF (action_ = 'CHECK') THEN
NULL;
ELSIF (action_ = 'DO') THEN
rec_ := Lock_By_Id___(objid_, objversion_);
Finite_State_Machine___(rec_, 'Confirm', attr_);
objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS');
Finite_State_Add_To_Attr___(rec_, attr_);
END IF;Check_Validate( rec_.contract_no, rec_.contract, rec_.change_no); info_ := Client_SYS.Get_All_Info;
END Confirm__;
现在有个想法是在Confirm__中调用一个后台的JOB,这个JOB调用Check_Validate,如何?
PROCEDURE Confirm__ (
info_ OUT VARCHAR2,
objid_ IN VARCHAR2,
objversion_ IN OUT VARCHAR2,
attr_ IN OUT VARCHAR2,
action_ IN VARCHAR2 )
IS
rec_ CONTRACT_CHANGE_TAB%ROWTYPE;
BEGIN
General_SYS.Init_Method(lu_name_, 'CONTRACT_CHANGE_API', 'Confirm__');
IF (action_ = 'CHECK') THEN
NULL;
ELSIF (action_ = 'DO') THEN
rec_ := Lock_By_Id___(objid_, objversion_);
Finite_State_Machine___(rec_, 'Confirm', attr_);
objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS');
Finite_State_Add_To_Attr___(rec_, attr_);
END IF;Check_Validate( rec_.contract_no, rec_.contract, rec_.change_no); info_ := Client_SYS.Get_All_Info;
END Confirm__;
jobno binary_integer;
begin
...
dbms_job.submit(jobno,'Check_Validate;',sysdate,null,false);
commit;
...
end;