我有一个过程将调用另一个过程,但是有时子过程要花费2分钟或更长时间才能完成。我试图找到一种方法:
RETURN
强制执行到调用方过程中有什么办法可以做到这一点?
呼叫者功能:
IF .... THEN ...
l_result := PKG_B.TRXN_PROC (PI_QUOT_NUM => pi_quot_num );
END IF;
答案 0 :(得分:3)
一个选项可能是使用dbms_scheduler
作为后台作业运行该过程,休眠20秒钟,然后终止该作业。
dbms_scheduler.run_job('MY_JOB_NAME');
DBMS_LOCK.sleep(seconds => '20');
SELECT STATE INTO v_state FROM USER_SCHEDULER_JOBS
WHERE JOB_NAME = 'MY_JOB_NAME';
IF v_state = 'RUNNING' THEN
dbms_scheduler.STOP_JOB(job_name=>'MY_JOB_NAME',force=>true);
END IF;
这只是为了给您一个想法,而不是一个功能齐全的代码。如果需要,建议添加更多检查/例外。还建议您每隔一周左右检查一次,而不是等待 full 20 ,而是由您选择。
运行它的用户可能需要以下授权。
grant create job , manage scheduler to your_user;
grant execute on dbms_lock to your_user;