Duvida em procedure MySQL

Esse script eu informo o id,quantidade, e uma variável pra retornar o resultado, gostaria que quando chamasse fosse incrementada a cada chamada a quantidade e a quantidade * o valor.

delimiter //
create procedure novo(argId int,quantidade smallint,out total varchar(10))
begin
    declare total_quantidade smallint;
    declare total_valor float(5,2) default 1;
    declare v1 float(5,2);
    declare v2 int;
    declare curs cursor for select preco,quant from produtos where id = argId;
    open curs;
    fetch curs into v1,v2;
    if v2 >= quantidade then
		SET SQL_SAFE_UPDATES=0;
		update produtos set quant = quant - quantidade where id = argId limit 1;
        SET SQL_SAFE_UPDATES=1;
        set total_quantidade = total_quantidade + quantidade;
		set total_valor = total_valor + (quantidade * v1);
	end if;
    close curs;
    set total = concat('(',total_quantidade,',',total_valor,')');
end //
delimiter ;</pre>
call novo(60,1,@q);
select @q;
1 curtida

E? Qual a dúvida?

1 curtida

gostaria que quando chamasse ‘novo’ fosse incrementada a cada chamada a quantidade e a quantidade * o valor do produto mais só retorna uma vez ex: se eu colocar 5 em quantidade o script vai me retornar (5,500.00) se eu chamar novamente call novo(5) ele me retorna (5,500.00) e não (10,1000.00) como eu gostaria.

Você precisa entender que uma SP não é capaz de manter informações além do período em que está em execução.
Ou seja, se você chamou uma vez

call novo(5);

Vai rodar, retornar o resultado e acabou, já era.
Para ter esse comportamento, você precisa gravar em uma tabela/coluna o valor previamente inserido e recuperar nas novas execuções.

1 curtida

Boa tarde. muito obrigada. me ajudou a passar pra outro assunto rsrs.