Jump to content
elton07

[Resolvido] PROCEDURE INCLUIR MAIS DE UM REGISTRO

Recommended Posts

Pessoal boa noite!

Preciso de um help, dos especialistas rs.

 

Seguinte, estou desenvolvendo uma aplicação de controle de estoque básica (ASP.NET COM MYSQL), onde incluo via aplicação mais de um registro em uma tabela, [entrada_produto_item], e tenho a seguinte procedure.


 

DELIMITER //
  CREATE PROCEDURE `SP_AtualizaEstoque`( `idproduto` int, `qtde_produto_item` int, `idalmoxarifado` int)
BEGIN
    declare contador int(11);

    SELECT count(*) into contador FROM estoque WHERE idproduto = idproduto;

    IF contador > 0 THEN
        UPDATE estoque SET qtde=qtde + qtde_produto_item
        WHERE idproduto = idproduto and idalmoxarifado=idalmoxarifado;
    ELSE
        INSERT INTO estoque (idproduto, qtde,idalmoxarifado) values (idproduto, qtde_produto_item,idalmoxarifado);
    END IF;
END //
DELIMITER ;

 

Que é chamada pela TRIGGER

 

DELIMITER //
CREATE TRIGGER `TRG_EntradaProduto_AI` AFTER INSERT ON `entrada_produto_item`
FOR EACH ROW
BEGIN
CALL SP_AtualizaEstoque (new.idproduto, new.qtde_produto_item , new.idalmoxarifado);
END //
DELIMITER ;

 

Porém ao incluir via aplicação mais de um registro de produtos com ID diferentes na tabela  entrada_produto_item, ao analisar a tabela [estoque] que é controlada pela procedure (SP_AtualizaEstoque), não mostra mais de um registro, apenas está incrementando no mesmo registro a quantidade de produtos informado.

 

Minha suspeita seja que na Procedure o filtro ".... idproduto = idproduto" não esteja fazendo distinção dos códigos diferentes dos procutos incluidos.

 

Alguém consegue me ajudar? desde já agradeço

Edited by Alaerte Gabriel
Adição da tag CODE

Share this post


Link to post
Share on other sites

Da um nome diferente para a variavel idproduto que vem por paramentro, tipo p_idproduto para diferenciar.

 

DELIMITER //
  CREATE PROCEDURE SP_AtualizaEstoque( p_idproduto int, p_qtde_produto_item int, p_idalmoxarifado int)
BEGIN
    declare contador int(11);

    SELECT count(*) into contador FROM estoque WHERE idproduto = p_idproduto;

...

Você colocar um p na frente do nome é até uma boa prática para não acontecer este tipo de conflito

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By DuduBacteria
      Tenho uma Tabela chamada "VENDAS" com os seguintes atributos:
       
       
      Eu quero retornar em MySQL o total de vendas ocorridos durante 1 semana, entre o dia atual até seis dias atrás.
       
      Ficando mais ou menos assim:
       
      SEMANA              TOTAL DE VENDIDO segunda                250.00 domingo                430.00 sábado                 160.50 sexta                  300.03 quinta                 300.03 quarta                 300.03 terça                  300.03
    • By biza
      Viva pessoal, 
      Estou com um problema na execução de um filtro aos dados vindos da base de dados, sera que alguém me pode ajudar, os dados estão vindo para a pagina através do método $_POST,
      que são seleccionados através do carregamento de uma dropbox chamada 'select-segment', desta forma se o utilizador apertar o botão 'action' ele executa o filtro caso não aperte ele executa a seleção sem filtros, será que alguém me pode ajudar...
      O erro devolvido é o seguinte:
      Fatal error::  Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Applications/MAMP/htdocs/cargeWebsite/carList.php:46
      Stack trace:
      #0 /Applications/MAMP/htdocs/cargeWebsite/carList.php(46): PDOStatement->execute()
      #1 /Applications/MAMP/htdocs/cargeWebsite/index.php(155): include('/Applications/M...')
      #2 {main}
        thrown in 
      $query .='SELECT * FROM tbl_vehicle AS v INNER JOIN tbl_brands AS b ON v.brand_id = b.id_brand INNER JOIN tbl_images AS i ON v.id_vehicle = i.vehicle_id INNER JOIN tbl_fuel AS f ON v.fuel_id = f.id_fuel WHERE v.active = :active'; if(isset($_POST['action'])){ if(isset($_POST['select-segment']) && $_POST['select-segment']!=''){ $segment_filter = $_POST['select-segment']; $query.= 'AND segment_id IN ("'.$segment_filter.'")'; } $query .='ORDER BY v.last_inser ASC'; }else{ $query .='ORDER BY v.last_inser ASC'; } if($_POST['lenght'] = -1){ $query_1 = 'LIMIT :inicio, :limite'; } $dbh = createPDO(); $statement = $dbh->prepare($query); $statement->bindValue(':active',$intermedio); $statement->execute(); $number_filter_row = $statement->rowCount(); $statement = $dbh->prepare($query . $query_1); $statement->bindValue(':inicio',(int)$init, PDO::PARAM_INT); $statement->bindValue(':limite',(int)$limite, PDO::PARAM_INT); $statement->execute(); foreach ($result as $row){ }  
    • By Kefatif
      Prezados, boa tarde.
       
      Estou com uma dúvida:
       
      Estou precisando trazer dados do banco para uma tela de edição de cadastro, até aí tudo bem consegui fazer para os input através do código abaixo:
       
      <label style="width:16%;margin-left: 2%;">Data de Início<br> <input type="date" value="<?php echo $row["DATA_DISPENSACAO"] ?>" class="form-control" style="width:100%;"> </label>  
      Mas o meu select já traz o controle de peso do banco, eu gostaria que além dele trazer esses pesos que traga o salvo no cadastro de uma pessoa para visualização e edição.
       
      Segue abaixo o código do select como está:
       
      <label style="width:15%">Peso<b style="color:red">*</b><br> <select name="peso" class="form-control" required style="width:100%" value="<?php echo $row["DATA_TESTE"] ?>"> <option value="">Selecione</option> <?php $sqlpeso = "select distinct PESO from TESTE where ID_ESQUEMA = ".$row["ID_ESQUEMA"]; $resultpeso = mysqli_query($con, $sqlpeso); while ($rowpeso= mysqli_fetch_array($resultpeso)){ ?> <option value="<?php echo utf8_encode($rowpeso["PESO"]);?>" ><?php echo utf8_encode($rowpeso["PESO"]); ?></option> <?php } ?> </select> </label>  
      Meu banco é MYSQL.
       
      Agradeço desde já a todos pela ajuda.
       
      Abraço!
    • By adriano.eurich
      Estou com duvida de como é montada uma query de um formulário com muitos campos em php!
      Ex. Tenho um formulário com titulo dados do cliente, nele tem vários campos para ser preenchidos, depois tem outro titulo que é dados do anuncio, que também tem vários campos a ser preenchido e mais alguns!
      Todos esses campos estão dentro de um único formulário que gostaria de enviar ao banco! Porem percebi que a query fica enorme e confusa de montar até mesmo para achar um erro!
      Acho que essa não é a melhor forma de fazer! 
      Gostaria de alguma dica ou esclarecimento de como fazer da melhor forma!
       
      Att
      Adriano
       
    • By Kefatif
      Prezados, boa tarde.
       
      Gostaria de ajuda para caso o valor no banco mysql, campo "fase" seja igual a "2" retorne uma mensagem, caso contrário siga o código
       
      Fico agradecido desde já.
       
      Abs.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.