› Fóruns › SQL e PL/SQL › [RESOLVIDO] Duvida tratamento de concorrência › [RESOLVIDO] Duvida tratamento de concorrência
Eu só não sei se conseguiria usar o SELECT FOR UPDATE para este caso, seria o caso?
É possível usar o select for update neste caso, mas não é necessário.
Só o fato de você fazer o update da flag de ‘DISPONIVEL’ para ‘OCUPADO’ já resolve teu problema.
Quando você vai agendar um horário, você pode usar a condição flag = ‘DISPONIVEL’ no comando de atualização do registro. Exemplo:
update AGENDA_DETAIL set flag = ‘OCUPADO’, id_cliente = quem_esta_agendando where id_da_dua_tabela = id_do_registro_a_ser_alterado AND flag = ‘DISPONIVEL’;
A parte em vermelho já basta para que somente a primeira pessoa a executar o update e efetuar o commit reserve o horário. A condição vai impedir as outras pessoas de atualizar o registro e sobrescrever o horário da pessoa que agendou anteriormente.
Após o update e commit, é só verificar se o id_cliente é o mesmo da pessoa que tentou agendar o horário, se sim, sucesso, se id_cliente não for igual, mostrar mensagem de que horário não está mais disponível.
Estou falando de update pois você comentou que a tabela AGENDA_DETAIL já tem os horários disponíveis, então imagino que esta funcionalidade de agendar horários seja feita somente com atualizações de registros já existentes.