+ Responder ao Tópico



  1. #1

    Padrão Mysql criar trigger mais de um produto

    Olá amigos!

    sou novo por aqui e espero que esteja postando no lugar certo.

    bom minha duvida é a seguinte estou fazendo uma aplicação em java para controle de estoque e como uso o banco de dados mysql, vi que é possivel criar triggers para imcrementar ou decrementar a quantidade no estoque.

    bom meu problema é o seguinte, criei uma trigger para dar baixa automatica no estoque quando adicionar produtos na saida do produto, minha aplicação está funcionando corretamente. Se adiciono um produto na saida ele da baixa na quantidade do estoque através de uma trigger que criei, mas se adiciono mais de um produto na saida ele apenas atualiza a quantidade de um produto deixando os demais como null (0), gostaria de saber se tem como criar uma trigger para atualizar mais de uma linha (varios produtos na coluna quantidade).

    fiz essa trigger é costaria de saber onde está o erro.
    Código :
    DELIMITER $$
     
    DROP TRIGGER /*!50032 IF EXISTS */ `siscorjava`.`SAIDA_CONSUMO`$$
     
    CREATE
        /*!50017 DEFINER = 'root'@'localhost' */
        TRIGGER `siscorjava`.`SAIDA_CONSUMO` AFTER INSERT ON `siscorjava`.`saida_det` 
        FOR EACH ROW BEGIN
    UPDATE SISCORJAVA.MATERIAL_CONSUMO AS S
     
     
                     SET S.QTDE_MATERIAL_CONSUMO = S.QTDE_MATERIAL_CONSUMO - NEW.QTDE_SAIDA_DET 
     
     
                     WHERE COD_MATERIAL_CONSUMO = NEW .COD_MATERIAL_CONSUMO;
     
     
    END;
    $$
     
    DELIMITER ;
    No aplicativo quando adiciono mais de um produto ele grava corretamente a saida e a quantidade indicada na tabela saida, mas na tabela produto ele apenas altera a quantidade de um produto deixando os demais nulos, mas fiz um teste e se adiciono apenas um produto e sua quantidade ele altera a quantidade do produto normalmente na tabela do produto.

    Desculpem se escrevi muito e talvez não fui tão claro mas quem puder me ajudar fico desde já grato.

    Um abraço e espero que me ajudem.
    Última edição por osmano807; 26-07-2010 às 20:09.

  2. #2

    Padrão Re: Mysql criar trigger mais de um produto

    Beleza Ribeiro,

    Caso não tenha resolvido, como vocÊ esta fazendo para passar o comando com a instrunção insert, você esta concatenando e incluindo o ; no final ou você está inseri registro a registro em um loop.?

    Abraços;

    Salinas

  3. #3

    Padrão Re: Mysql criar trigger mais de um produto

    Olá amigo Salinas!

    Obrigado por responder minha duvida.

    Meu problema é o seguinte estou desenvolvendo um aplicativo em java e criei uma tela de saida de produtos onde está vinculada com minhas tabelas saida_cab e saida_det. No aplicativo criei um botão para inserir nova saida, colocando a data e importando os produtos para essa tela, ficando a quantidade para ser inserida manualmente pelo usuario, a soma dos produtos criei um botão para calcular os valores, até ai tudo importo os produtos que vou dar saida e funciona beleza, salvo e vou no banco de dados e está tudo certo, produto , quantidade e valor, mas gostaria de dar baixa automaticamente em outra tabela do meu banco de dados, a tabela material_consumo.
    criei está trigger que não sei se está correta:
    DELIMITER $$
    DROP TRIGGER /*!50032 IF EXISTS */ `siscorjava`.`SAIDA_MATERIAL`$$
    CREATE
    /*!50017 DEFINER = 'root'@'localhost' */

    TRIGGER `siscorjava`.`SAIDA_MATERIAL` AFTER INSERT ON `siscorjava`.`saida_det`

    FOR EACH ROW BEGIN

    UPDATE SISCORJAVA.MATERIAL_CONSUMO AS P

    SET P.QTDE_MATERIAL_CONSUMO = P.QTDE_MATERIAL_CONSUMO - NEW.QTDE_SAIDA_DET

    WHERE P.COD_MATERIAL_CONSUMO=NEW.COD_MATERIAL_CONSUMO;
    END;
    $$
    DELIMITER ;
    O problema que percebi é o seguinte se no aplicativo importar apenas um produto ele da baixa na tabela material_consumo corretamente, tipo se tenho na tabela material_consumo na coluna quantidade 50 peças e no aplicatico coloco a saida deste produto 5 peças ele faz tudo normal , mas se importo mais de um produto colocando a quantidade de cada item na saida exemplo, importo os produtos papel sulfite, caneta bic preta, caneta bic azul e coloco a quantidade de 5 itens cada ele grava certinho na tabela saida_det mas com a trigger que criei ele da baixa corretamente em apenas um produto na tabela material_consumo coluna quantidade deixando os demais nulos, exemplo papel sulfite null, caneta bic preta null, caneta bic azul 45, ele da baixa em apenas um produto corretamente e apaga os demais que importei.
    Desculpe ao tamanho do texto, mas no que será que estou errando, parece que a trigger não está enxergando os demais ou é um bug do mysql 5.1.
    Agradeço a atenção do amigo e espero que me ajudem.

  4. #4

    Padrão Re: Mysql criar trigger mais de um produto

    Olá amigos!

    bom a respeito da pergunta acima já está resolvido.
    A trigger está funcionando perfeitamente, o problema era na hora de importar os produtos, pois a trigger disparava na importação de cada produto , onde o erro acontecia pois não colocava a quantidade do produto importado ficando (0) ou nullo só validando o ultimo produto importado pois colocava as quantidades depois e gravava o registro, vi que a cada produto importado tenho que colocar a quantidade e assim depois importar outro produto funcionando perfeitamente.

    Não era bem o que esperava pois, se fosse cancelada a saida depois que tivesse importado mais de um produto já ficaria gravado a quantidade dos produtos importados.pra mim o certo seria importar os produtos e as quantidades de cada item e se antes de gravar a pessoa cancelaria as saidas nada teria acontecido ficando tudo normal, mas pelo que vi vou ter que criar outra trigger para acessar a saida mesmo que cancelada para poder devolver a quantidade retirada .

    bom é isso pessoal se alguem tiver alguma ideia para compartilhar ficarei muito grato.
    Um abraço a todos.