Yarynich
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: упс... транзакция не должна быть readonly, но нужно гарантировать, что она не будет заканчиваться commit-ом, а обязательно rollback-ом, чтобы не запомнить чей-то выбор. Но такой подход создаст бутылочное горлышко - одни и те же записи нельзя одновременно выбрать - deadlock... Ещё вариант - поле ch int default 0 - битовая маска и каждый клиент получает свой "бит" для выбора. В таком варианте ограничением станет кол-во бит... а запрос на установку бита будет такого плана Код: execute block ( ... "Flags" integer = :"Flags", "Flag1" integer = :"Flag1", "Flag2" integer = :"Flag2" ) as begin if ("Flag1" = 1) then "Flags" = bin_or(:"Flags", 1); else "Flags" = bin_and(:"Flags", bin_xor(1, 2147483647)); if ("Flag2" = 1) then "Flags" = bin_or(:"Flags", 2); else "Flags" = bin_and(:"Flags", bin_xor(2, 2147483647)); update "Brands" set ... "Flags" = :"Flags" where "BrandID" = :"BrandID"; end | |