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.