我有一个更新查询,每次精确地在一行中重新计算-每个列的值。由于这些更新查询发生在同一行,我已经看到了更多的行级锁争用。
我在想,也许有一种解决方案是让后续的更新抢占已经在进行的任何更新。这个是可能的吗?Oracle支持这种更新吗?
详细地阐明这个想法:
我的想法是,可以步骤5简单地是:查询#1被中止,查询#2继续进行。或者从一开始就放弃获取行级锁。
我意识到,如果更新查询只更新给定行中的一个列的子集,那么这个逻辑将是灾难性的错误。但不是--每一列都要重新计算,每次。
发布于 2010-09-23 03:05:11
发布于 2010-09-23 17:36:54
发布于 2014-01-22 17:51:23
甲骨文的UPDATE不支持任何锁定提示。
但OraFAQ论坛提出了这样一个棘手的解决方案:
DECLARE
x CHAR(1);
BEGIN
SELECT 'x' INTO x
FROM tablea
WHERE -- your update condition
FOR UPDATE OF cola NOWAIT;
UPDATE tablea
SET cola = value
WHERE -- your update condition
EXCEPTION
WHEN OTHERS THEN
NULL; -- handle the exception
END;https://stackoverflow.com/questions/3774646
复制相似问题