我正在使用Oracle DB Server,我有一个存储过程,它将由不同的流并行执行。此存储过程使用数据库中的一个表来插入和删除记录。在存储过程中的某个点,我希望它暂停一段时间然后执行。
我可以编写什么语句来暂停存储过程一段时间而不锁定它正在使用的表?
Oracle存储过程中有哪些替代方法可以实现此类功能?
我可以使用DBMS_LOCK.SLEEP(seconds)
吗?正如我所说,同一个表由不同的流并行使用,这个DBMS_LOCK.SLEEP(n)
过程会在存储过程暂停时锁定表吗?当存储过程处于睡眠状态时,它会占用CPU周期吗?
除了在Oracle DB Server中使用DBMS_LOCK.SLEEP(n)
过程之外,还有其他替代方法可以实现此功能吗?
答案 0 :(得分:4)
您可以使用DBMS_LOCK.SLEEP(n)
程序。一个程序,用于停止执行当前线程n
秒。
请注意,默认情况下,DBMS_LOCK
未授予PUBLIC(或任何其他人)。因此,您需要让友好的DBA发出必要的EXECUTE特权。
答案 1 :(得分:0)
这听起来是DBMS_PARALLEL_EXECUTE
包的任务
请参阅此处的文档DBMS_PARALLEL_EXECUTE
要停止处理,您可以使用STOP_TASK
https://docs.oracle.com/database/121/ARPLS/d_parallel_ex.htm#ARPLS67379
STOP_TASK Procedure
This procedure stops the task and related job slaves.
Syntax
DBMS_PARALLEL_EXECUTE.STOP_TASK (
task_name IN VARCHAR2);
Parameters