我编写了一个简单的游标,用于锁定特定的行以进行更新。 在大量尝试多线程的情况下,锁似乎不起作用,其他线程能够更新锁定的行。 好像他们不需要等到锁被释放。
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;
很抱歉,我无法透露此锁定的全部目的。