Цитата:
Сообщение от
Volodymyr
Интересно, можно ли как то в селекте выбрать линии, которые точно не проапдейтятся другим батчем?
Вторым батчем пойти задом наперед.
X++:
run()
{
Trans trans;
Trans buffer;
boolean reversed;
;
try
{
select trans
order by RecId asc
where trans.open;
while (trans)
{
buffer = Trans::find(trans.recid);
if (!buffer.open)
{
if (!reversed)
{
reversed = true;
select trans
order by RecId desc
where trans.open;
continue;
}
else
{
break;
}
}
ttsbegin;
buffer.selectForUpdate(true);
buffer.open = false;
buffer.doUpdate();
.......
buffer.update()
ttscommit;
next trans;
}
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
retry;
}
}
Третий батч просто вылетит.