【发布时间】:2015-12-27 06:25:35
【问题描述】:
我正在使用 Oracle DB 服务器,并且我有一个存储过程,它将由不同的流并行执行。此存储过程使用数据库中的一张表来插入和删除记录。在存储过程中的某个点,我希望它暂停一段时间然后执行。
我可以写什么语句来暂停存储过程一段时间而不锁定它正在使用的表?
Oracle 存储过程中有哪些可用的替代方法来实现这种功能?
我可以使用DBMS_LOCK.SLEEP(seconds) 吗?正如我所说,不同的流程并行使用同一个表,这个DBMS_LOCK.SLEEP(n) 过程会在存储过程暂停时锁定表吗?存储过程处于休眠状态时是否会消耗CPU周期?
除了在 Oracle DB Server 中使用 DBMS_LOCK.SLEEP(n) 过程之外,还有其他替代方法可以实现此功能吗?
【问题讨论】:
-
试试sleep?澄清您使用的是哪个数据库服务器..
-
我正在使用 oracle DB。我不希望存储过程在暂停状态时消耗 cpu 周期,是否可以休眠?
-
您能否在您的问题中提及……提供所有可能的信息并提供您使用的数据服务器,然后我们可以提供帮助。
-
暂停的目的是什么?是要同步线程吗?
-
dbms_lock.sleep不会取出新的锁,但它会不释放已经持有的锁。因此,如果一个人更新了几百行,然后在提交之前休眠,则写锁将在这些行上保持持续时间。