PL / SQL FOR UPDATE对其他会话锁定不一致和不可见

时间:2016-02-17 09:43:10

标签: sql oracle plsql locking sqltransaction

我编写了一个简单的游标,用于锁定特定的行以进行更新。 在大量尝试多线程的情况下,锁似乎不起作用,其他线程能够更新锁定的行。 好像他们不需要等到锁被释放。

CURSOR cu_LockEntity (lockType    IN YSTEM_LOCKS_T.LOCK_CODE%TYPE,
                      entityType  IN SYSTEM_LOCKS_T.ENTITY_CODE%TYPE,
                      entityId    IN SYSTEM_LOCKS_T.ENTITY_ID%TYPE) IS
     SELECT LOCK_TYPE_CODE
       FROM SYSTEM_LOCKS_T
      WHERE LOCK_CODE = lockType
        AND ENTITY_CODE = entityType
        AND ENTITY_ID = entityId
        FOR UPDATE;

我在整个数据库中使用类似的锁,并且不会遇到这样的问题。 这可能是什么原因?我可以使用更高效的锁定选项吗?

这是为需要它的新线程更新锁的查询。

UPDATE SYSTEM_LOCKS_T
   SET LOCK_DATE = SYSDATE
 WHERE LOCK_CODE = lockType
   AND ENTITY_CODE = entityType
   AND ENTITY_ID = entityId;

很抱歉,我无法透露此锁定的全部目的。

0 个答案:

没有答案