Boa Noite, sou iniciante em mysql, mas tenho grande conhecimento em Sql server, nele crie uma trigger com cursor que é disparado quando insiro ou deleto uma informação, porem tive que recriar em formato mysql para uma determinada empresa porem quando executo essa trigger da um erro fatal e para o servidor. poderiam avaliar o meu script e mim dizer onde estar o erro. Em sql server esta funcionando normalmente.
DECLARE @ID_Nota INT,
@ID_Nota2 INT,
@ID_Produto INT,
@PonteiroRegistro INT = 0,
@Movimenta_Saldo BIT,
@PonteiroIndicador INT,
@Tipo_Movimento CHAR(1),
@Quantidade_Movimentar NUMERIC(15,3),
@Ponteiro INT;
-- Atualizar Estoque ( Inserted )
DECLARE C_Notas2_Saldo CURSOR FOR SELECT ID_Nota,
ID_Nota2,
ID_Produto,
Quantidade_Movimentar
FROM INSERTED;
OPEN C_Notas2_Saldo;
FETCH NEXT FROM C_Notas2_Saldo INTO @ID_Nota,
@ID_Nota2,
@ID_Produto,
@Quantidade_Movimentar;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Tipo_Movimento = (SELECT TOP 1 RTRIM(Tipo_Movimento) AS Tipo_Movimento FROM notas WHERE Notas.ID_Nota = @ID_Nota);
IF @Tipo_Movimento = 'S'
BEGIN
SET @Quantidade_Movimentar = ISNULL(@Quantidade_Movimentar,0) * -1;
END
SET @PonteiroRegistro = ( SELECT COUNT(1) AS qtd
FROM estoque
WHERE ID_Produto = @ID_Produto )
IF ( @PonteiroRegistro = 0 )
BEGIN
INSERT INTO `nfe`.`estoque`(
`ID_Produto`,
`Quantidade`
) VALUES (
@ID_Produto,
@Quantidade_Movimentar )
END
ELSE
BEGIN
UPDATE `nfe`.`estoque`
SET `Quantidade` = Quantidade + @Quantidade_Movimentar
WHERE ID_Produto = @ID_Produto
END
FETCH NEXT FROM C_Notas2_Saldo INTO @ID_Nota,
@ID_Nota2,
@ID_Produto,
@Quantidade_Movimentar;
END
CLOSE C_Notas2_Saldo;
DEALLOCATE C_Notas2_Saldo;
--Atualizar Estoque ( Deleted )
DECLARE C_Notas2_Saldo CURSOR FOR SELECT ID_Nota,
ID_Nota2,
ID_Produto,
Quantidade_Movimentar
FROM DELETED;
OPEN C_Notas2_Saldo;
FETCH NEXT FROM C_Notas2_Saldo INTO @ID_Nota,
@ID_Nota2,
@ID_Produto,
@Quantidade_Movimentar;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Tipo_Movimento = (SELECT TOP 1 RTRIM(Tipo_Movimento) AS Tipo_Movimento FROM notas WHERE Notas.ID_Nota = @ID_Nota);
IF @Tipo_Movimento = 'E'
BEGIN
SET @Quantidade_Movimentar = ISNULL(@Quantidade_Movimentar,0) * -1;
END
SET @PonteiroRegistro = ( SELECT COUNT(1) AS qtd
FROM estoque
WHERE ID_Produto = @ID_Produto)
IF ( @PonteiroRegistro = 0 )
BEGIN
INSERT INTO `nfe`.`estoque`(
`ID_Produto`,
`Quantidade`
) VALUES (
@ID_Produto,
@Quantidade_Movimentar )
END
ELSE
BEGIN
UPDATE `nfe`.`estoque`
SET `Quantidade` = Quantidade + @Quantidade_Movimentar
WHERE ID_Produto = @ID_Produto
END
FETCH NEXT FROM C_Notas2_Saldo INTO @ID_Nota,
@ID_Nota2,
@ID_Produto,
@Quantidade_Movimentar;
END
CLOSE C_Notas2_Saldo;
DEALLOCATE C_Notas2_Saldo;
Pergunta
carlos rogerio
Boa Noite, sou iniciante em mysql, mas tenho grande conhecimento em Sql server, nele crie uma trigger com cursor que é disparado quando insiro ou deleto uma informação, porem tive que recriar em formato mysql para uma determinada empresa porem quando executo essa trigger da um erro fatal e para o servidor. poderiam avaliar o meu script e mim dizer onde estar o erro. Em sql server esta funcionando normalmente.
---------------------------------------------------------------------------------
---------------------------------------------------------------------------
roger.21@ibest.com.br
Editado por Denis Courcycolocar codigo entre CODEs
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.