¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Optimizando el proceso de actualización y inserción de registros en dos tablas: ¿Cuál es la mejor secuencia a seguir?

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 2 Vistas
0
Cargando...

Hola,

Estoy desarrollando un programa que necesita actualizar un campo (estado) en una ztabla1 y luego insertar un registro en ztabla2.

Hasta ahora he hecho lo siguiente:

1.- bloquear ztabla1

2.- actualizar campo ztabla1-estado

3.- desbloquear ztabla1

4.- bloquear ztabla2

5.- insertar entrada en ztabla2

6.- desbloquear ztabla2

¿Sería mejor hacer 1 4 2 5 3 6 en su lugar?

Cualquier sugerencia sería muy apreciada.

Saludos cordiales.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

Hola Calsadillo,

El concepto de encolado se utiliza para evitar que dos o más procesos intenten actualizar un registro de base de datos al mismo tiempo. Sin esto, dos procesos podrían seleccionar un registro, aplicar diferentes cambios y luego actualizar la base de datos uno tras otro. En este caso, las actualizaciones aplicadas por el primer proceso serían sobrescritas por las actualizaciones del segundo proceso.

Por lo tanto, mi primer comentario sería que no necesitas encolar ztable2 en absoluto si estás realizando un comando INSERT SQL.

El segundo comentario sería, ¿cuándo seleccionas los datos a actualizar para ztable1? Justo antes de esta selección, debes encolar los datos para ztable1. Esto significa que si otro proceso quiere acceder a estos datos para actualizarlos, su encolado fallará y no debería seleccionar los datos. Luego debes desencolar los datos para ztable1 después de haber realizado la actualización. (Puedes ver cómo SAP utiliza esta lógica al intentar cambiar una orden de venta en VA02 y luego, con otra sesión, intentar hacer lo mismo; te bloquearán).

Así que la secuencia sería más o menos la siguiente:

1. Encolar ztable1

2. Seleccionar los datos de ztable1 para actualizar

3. Actualizar el estado de ztable1

4. Insertar entrada en ztable2

5. Realizar commit work (lo que desencolará automáticamente ztable1)

6. Desencolar ztable1 (solo por exhaustividad)

Espero que esto ayude.

Brad

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Calsadillo,

El concepto de encolar se utiliza para evitar que dos o más procesos intenten actualizar un registro de base de datos al mismo tiempo. Sin esto, dos procesos podrían seleccionar un registro, aplicar cambios diferentes y luego actualizar la base de datos uno después del otro. En este caso, las actualizaciones aplicadas por el primer proceso serían sobrescritas por las actualizaciones del segundo proceso.

Por lo tanto, mi primer comentario sería que no necesitas encolar ztable2 en absoluto si estás realizando un comando INSERT SQL.

El segundo comentario sería, ¿cuándo seleccionas los datos a actualizar para ztable1? Justo antes de esta selección, debes encolar los datos para ztable1. Esto significa que si otro proceso quiere acceder a estos datos para actualizarlos, su encolado fallará y no debería seleccionar los datos. Luego debes desencolar los datos para ztable1 después de haber realizado la actualización. (puedes ver cómo SAP utiliza esta lógica al intentar cambiar una orden de venta en VA02 y luego, con otra sesión, intentar hacer lo mismo; serás bloqueado).

Entonces, la secuencia sería más o menos así:

1. Encolar ztable1

2. Seleccionar datos de ztable1 para actualizar

3. Actualizar el estado de ztable1

4. Insertar entrada en ztable2

5. Realizar commit work (lo que desencolará automáticamente ztable1)

6. Desencolar ztable1 (solo por exhaustividad)

Espero que esto ayude.

Brad

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?