Stored Procedure - SP_AtualizaEstoque

17/12/2020

0

Boa tarde;
gostaria da ajuda de vocês para transformar essa stored procedure a baixo que vim neste artigo da davmedia "Implementando controle de estoque no MySQL com triggers e procedure" ; so que ja tentei e não estou conseguindo transformar para firebird.
Agradeço a todos que puderem me ajudar.


DELIMITER //
CREATE PROCEDURE `SP_AtualizaEstoque`( `id_prod` int, `qtde_comprada` int, valor_unit decimal(9,2))
BEGIN
declare contador int(11);

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

IF contador > 0 THEN
UPDATE estoque SET qtde=qtde + qtde_comprada, valor_unitario= valor_unit
WHERE id_produto = id_prod;
ELSE
INSERT INTO estoque (id_produto, qtde, valor_unitario) values (id_prod, qtde_comprada, valor_unit);
END IF;
END //
DELIMITER ;
Joaci Queiroz

Joaci Queiroz

Responder

Posts

17/12/2020

Alex William

Olá amigo, tudo bem?

Veja se este material te ajuda:

https://firebirdsql.org/refdocs/langrefupd21-ddl-procedure.html

Espero ter ajudado. :D
Responder

17/12/2020

Emerson Nascimento

deve ser algo assim:
CREATE PROCEDURE SP_AtualizaEstoque( id_prod int, qtde_mov int, tipo_mov char(1), valor_unit decimal(9,2))
AS
BEGIN
	-- garante que o produdo sempre existirá na tabela
	-- só precisa tomar cuidado com saídas de produtos que
	-- ainda não estejam na tabela, pra evitar saldo negativo
	if not exists(SELECT id_produto FROM estoque WHERE id_produto = :id_prod)
		INSERT INTO estoque (id_produto, qtde, valor_unitario) values (:id_prod, 0, 0);

	-- agora efetua a movimentação solicitada
	if (upper(:tipo_mov) = 'E') -- entrada
		UPDATE estoque SET qtde = qtde + :qtde_mov, valor_unitario = :valor_unit WHERE id_produto = :id_prod;
	else
		UPDATE estoque SET qtde = qtde - :qtde_mov, valor_unitario = :valor_unit WHERE id_produto = :id_prod;

END
Responder

18/12/2020

Joaci Queiroz

deve ser algo assim:
CREATE PROCEDURE SP_AtualizaEstoque( id_prod int, qtde_mov int, tipo_mov char(1), valor_unit decimal(9,2))
AS
BEGIN
	-- garante que o produdo sempre existirá na tabela
	-- só precisa tomar cuidado com saídas de produtos que
	-- ainda não estejam na tabela, pra evitar saldo negativo
	if not exists(SELECT id_produto FROM estoque WHERE id_produto = :id_prod)
		INSERT INTO estoque (id_produto, qtde, valor_unitario) values (:id_prod, 0, 0);

	-- agora efetua a movimentação solicitada
	if (upper(:tipo_mov) = 'E') -- entrada
		UPDATE estoque SET qtde = qtde + :qtde_mov, valor_unitario = :valor_unit WHERE id_produto = :id_prod;
	else
		UPDATE estoque SET qtde = qtde - :qtde_mov, valor_unitario = :valor_unit WHERE id_produto = :id_prod;

END


obrigado, valeu
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar