Como corrigir o disparo da mesma trigger no mesmo horario
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?
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
Curtidas 0
Respostas
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.
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
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
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
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