Ir para conteúdo
Fórum Script Brasil
  • 0

Dificuldade em criar uma trigger com cursor


carlos rogerio

Pergunta

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;

---------------------------------------------------------------------------

roger.21@ibest.com.br

Editado por Denis Courcy
colocar 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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...