Показать сообщение отдельно
Старый 08.05.2008, 19:36   #10  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
:)
Цитата:
Сообщение от 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;
    }
}
Третий батч просто вылетит.