Como corrigir o disparo da mesma trigger no mesmo horario

Firebird

16/10/2015

Galera eu utilizo o firebird 2.5 e tenho uma trigger para o estoque e onde ele atualiza o estoque de acordo com a operação realizada.

E essa semana dois usuários conseguiram disparar a mesma trigger no mesmo horario 15:25:30, nunca pensei q fosse possivel no mesmo segundo, por esse motivo não contabilizou o estoque correto. Tem como tratar isso?

CREATE OR ALTER trigger trg_pedido_mov_estoque for pedidos
active after update position 0
AS
  declare variable v_produto integer;
  declare variable v_qtde integer;
begin
 /* Select para pegar a operação da movimentação e o tipo de venda for 1 (VENDA DIRETA)*/
 FOR
   select
      pedidos_itens.prod_id,
      pedidos_itens.pi_qtde
   from pedidos_itens
   where
     pedidos_itens.ped_id = old.ped_id
   into :v_produto,
        :v_qtde
 DO

    /* INICIO DO NOVO SCRIPT */

    /* Se a Operação for uma saída e o tipo de venda for diferente da
     pronta-entrega e o status for finalizado */
    if ((new.status = 1) and (new.cancelado = 'N') and (new.nfe_id < 1) and (new.tipo_id <> 4)) then
    begin
        -- Entrada na tabela Estoque
        EXECUTE PROCEDURE SP_ESTOQUE_INSERT(:v_produto,
                                            'PEDIDO Nº ' || old.ped_id,
                                            'FINALIZAÇÃO',
                                            NULL,
                                            0,
                                            :v_qtde,
                                            NULL,
                                            NULL,
                                            new.usu_id,
                                            new.loj_id);
    end

end
Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Alex Lekao

Alex Lekao

16/10/2015

Ola Sidney, nao manjo bem dessas coisas, mas nao seria interessante bloquear o registro e depois liberar? acredito que assim ele gere uma fila na gravacao e evita esse tipo de problema.

talvez deva verificar tambem sobre o esquema de transacao, nao sei se seria esse o caso, mas iniciar uma transaction e depois fechar a transaction, acredito que talvez ajude.

como disse nao manjo tao bem dessas coisas, espero que ajude.

Abraco.
GOSTEI 0
Sidney Abreu

Sidney Abreu

16/10/2015

Opa Alex, tranquilo? Não entendi sobre o bloqueio de registro e depois liberar, como seria isso direto no banco?
GOSTEI 0
Alex Lekao

Alex Lekao

16/10/2015

rapaz, agora vc me apertou, eu nao conheco esses lances. kkkkk

veja neste link se te ajuda de alguma forma. rsrsr

[url]http://mail.firebase.com.br/pipermail/lista_firebase.com.br/2008-December/057493.html[/url]

eu sei que no sql server, qdo vc abre um transaction, ele coloca todo mundo na fila ate vc fechar a transaction, entao com isso vc corre menos risco deste problema, mas nao eh o meu forte essa area, me ligo mais no select cru. rsrsr
GOSTEI 0
POSTAR