Transacción sencilla
Publicado por Julián Cabria (2 intervenciones) el 30/08/2010 08:53:40
Hola chicos,
Resulta que estoy programando una aplicación en la qual tengo una tabla de oracle donde guardo información de contenedores. Cada registro es un contenedor. Diferentes usuarios pueden realizar operaciones sobre los contenedores. La aplicación, para que un usuario pueda realizar dichas operaciones, marcará un campo del registro para indicar que el contenedor está bloqueado y así ningún usuario pueda realizar operaciones mientras este las esté realizando.
Hasta aquí ningun problema, el dilema viene ahora:
Para marcar un contenedor como ocupado hay que hacer dos pasos:
1.- SELECT para consultar si el contenedor está ocupado
2.- Si el contenedor está libre, UPDATE para marcar el contenedor como ocupado
Si dos usuarios quieren ocupar el contenedor a la vez pasaria lo siguiente:
USUARIO 1 USUARIO 2
SELECT -Contenedor libre
SELECT -Contenedor libre
UPDATE -Ocupado por USU1
UPDATE -Ocupado por USU2
Los dos usuarios ocuparían el contenedor. Necesitaria que el SELECT y el UPDATE se ejecutaran consecutivamente, dentro de una misma transacción.
Soy nuevo en ORACLE. He estado mirando documentación y no hay la instrucción BEGIN TRANSACTION. Una transacción en ORACLE, si no me equivoco, se inicia en una sentencia LDD o LMD pero el SELECT no es ninguna de ellas. Como puedo solucionar el problema?????????
Espero que haya quedado claro el problema. Muchas gracias!
Resulta que estoy programando una aplicación en la qual tengo una tabla de oracle donde guardo información de contenedores. Cada registro es un contenedor. Diferentes usuarios pueden realizar operaciones sobre los contenedores. La aplicación, para que un usuario pueda realizar dichas operaciones, marcará un campo del registro para indicar que el contenedor está bloqueado y así ningún usuario pueda realizar operaciones mientras este las esté realizando.
Hasta aquí ningun problema, el dilema viene ahora:
Para marcar un contenedor como ocupado hay que hacer dos pasos:
1.- SELECT para consultar si el contenedor está ocupado
2.- Si el contenedor está libre, UPDATE para marcar el contenedor como ocupado
Si dos usuarios quieren ocupar el contenedor a la vez pasaria lo siguiente:
USUARIO 1 USUARIO 2
SELECT -Contenedor libre
SELECT -Contenedor libre
UPDATE -Ocupado por USU1
UPDATE -Ocupado por USU2
Los dos usuarios ocuparían el contenedor. Necesitaria que el SELECT y el UPDATE se ejecutaran consecutivamente, dentro de una misma transacción.
Soy nuevo en ORACLE. He estado mirando documentación y no hay la instrucción BEGIN TRANSACTION. Una transacción en ORACLE, si no me equivoco, se inicia en una sentencia LDD o LMD pero el SELECT no es ninguna de ellas. Como puedo solucionar el problema?????????
Espero que haya quedado claro el problema. Muchas gracias!
Valora esta pregunta


0