Estás buscando bloqueos con nombre (cuidado, cosas peligrosas, no te entretengas experimentando con bloqueos en servidores de producción :D).
Echa un vistazo a:
GET_LOCK
en él (digamos, GET_LOCK('conversation_' || [id])
; si devuelve 1
la cerradura es tuya. Haz lo que quieras y luego llama a RELEASE_LOCK
(teniendo en cuenta todos los escenarios posibles, incluidos los errores).
GET_LOCK
es un tiempo de espera en segundos . Si la operación supera el tiempo GET_LOCK
devolverá 0
.
De la documentación oficial
Las negritas son mías:
- Significa que solo puede mantener un bloqueo por conexión (no es un problema para su caso de usuario)
- Significa que los bloqueos se liberarán una vez que cierre la conexión
- Significa que dos conexiones diferentes (incluso del mismo grupo) pueden no adquirir el mismo aspecto a la vez.