Jump to content
Fórum Script Brasil
  • 0

Dificuldade em criar uma trigger com cursor


carlos rogerio

Question

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

Edited by Denis Courcy
colocar codigo entre CODEs
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...