¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Otimizando o processo de atualização e inserção de registros em duas tabelas: Qual é a melhor sequência a seguir?

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

Olá,

Estou desenvolvendo um programa que precisa atualizar um campo (estado) em uma ztabla1 e depois inserir um registro na ztabla2.

Até agora, fiz o seguinte:

1.- bloquear ztabla1

2.- atualizar campo ztabla1-estado

3.- desbloquear ztabla1

4.- bloquear ztabla2

5.- inserir entrada em ztabla2

6.- desbloquear ztabla2

Seria melhor fazer 1 4 2 5 3 6 em vez disso?

Qualquer sugestão seria muito apreciada.

Atenciosamente.

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

2 Respuestas

0
Cargando...

Olá Calsadillo,

O conceito de enfileiramento é utilizado para evitar que dois ou mais processos tentem atualizar um registro de banco de dados ao mesmo tempo. Sem isso, dois processos poderiam selecionar um registro, aplicar diferentes alterações e então atualizar o banco de dados um após o outro. Neste caso, as atualizações feitas pelo primeiro processo seriam sobrescritas pelas atualizações do segundo processo.

Portanto, meu primeiro comentário seria que você não precisa enfileirar ztable2 se estiver executando um comando INSERT SQL.

Meu segundo comentário seria, quando você seleciona os dados a serem atualizados para ztable1? Logo antes dessa seleção, você deve enfileirar os dados para ztable1. Isso significa que se outro processo tentar acessar esses dados para atualizá-los, sua tentativa de enfileiramento falhará e ele não deverá selecionar os dados. Em seguida, você deve desenfileirar os dados para ztable1 após ter feito a atualização. (Você pode ver como a SAP utiliza essa lógica ao tentar alterar um pedido de vendas em VA02 e, em seguida, com outra sessão, tentar fazer o mesmo; você será bloqueado).

Assim, a sequência seria mais ou menos a seguinte:

1. Enfileirar ztable1

2. Selecionar os dados de ztable1 para atualização

3. Atualizar o estado de ztable1

4. Inserir entrada em ztable2

5. Realizar commit work (o que desenfileirará automaticamente ztable1)

6. Desenfileirar ztable1 (apenas por precaução)

Espero que isso ajude.

Brad

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

Olá Calsadillo,

O conceito de enfileiramento é usado para evitar que dois ou mais processos tentem atualizar um registro de banco de dados ao mesmo tempo. Sem isso, dois processos poderiam selecionar um registro, aplicar alterações diferentes e depois atualizar o banco de dados um após o outro. Nesse caso, as atualizações feitas pelo primeiro processo seriam sobrescritas pelas atualizações do segundo processo.

Portanto, meu primeiro comentário seria que você não precisa enfileirar ztable2 se estiver executando um comando INSERT SQL.

Meu segundo comentário seria, quando você seleciona os dados a serem atualizados para ztable1? Logo antes dessa seleção, você deve enfileirar os dados para ztable1. Isso significa que se outro processo quiser acessar esses dados para atualizá-los, a enfileiramento falhará e não deveria selecionar os dados. Em seguida, você deve desenfileirar os dados para ztable1 após a atualização. (você pode ver como a SAP utiliza essa lógica ao tentar alterar um pedido de venda em VA02 e, em seguida, com outra sessão, tentar fazer o mesmo; você será bloqueado).

Portanto, a sequência seria mais ou menos assim:

1. Enfileirar ztable1

2. Selecionar dados de ztable1 para atualização

3. Atualizar o estado de ztable1

4. Inserir entrada em ztable2

5. Realizar commit work (o que desenfileirará automaticamente ztable1)

6. Desenfileirar ztable1 (apenas por exaustividade)

Espero que isso ajude.

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?