il mio problema è il seguente: ho una tabella, PIPPO, le cui righe sono oggetti fondamentalemente di due tipi DEFAULT e non DEFUALT.

PIPPO
ID NOME DEFAULT ...
1 PLUTO TRUE
2 PIPPO FALSE ...

Secondo la mia logica di business, se faccio delle operazioni su oggetti PIPPO DEAFULT, non posso farlo sulle altre, e viceversa.

Fin quando le operazioni vengono richieste a distanza di tempo, io questa cosa la blocco lato client, inibendo i menu; ma se la richiesta avviene in contemporanea, succede che un client che vuole lavorare su un PIPPO 'TRUE' trovi liberi tutti quelli 'FALSE' e un altro client che vuole lavorare su un PIPPO 'FALSE' trovi liberi tutti i 'TRUE'.

La mia idea è stata quella di aggiungere un campo alla tabella che mi dicesse se per quell'oggetto era stata già richiesta l'operazione o meno

PIPPO
ID NOME DEFAULT OP
1 PLUTO TRUE 0
2 PIPPO FALSE 1

Ho fatto una stored procedure che praticamente fa

codice:
AVAILABLE_PIPPO(Type, MyPippo)
select count(*) into COUNT from pippo where default = type and op = 0
if (count == 0) then
   update MyPippo set op = 1
end if;
In questo modo, quando il secondo client selezionerà con il type opposto, troverà MyPippo a 1.

La procedura funziona in linea di massima, ma mi sono accorto che alcune volte no, come se in casi di assoluta simultaneità le due select le fa insieme ed entrambe aggiornino.

Come posso superare questa cosa?