3
respostas

Erro na criação de procedure

CREATE PROCEDURE `comparativo_vendas ` (vdata1 date,vdata2 date)
BEGIN
/*
Ela retorna o valor do faturamento em uma determinada data.

Construa uma Stored Procedure chamada Comparativo_Vendas que compara as vendas em duas datas (Estas duas datas serão parâmetros da SP).
 Se a variação percentual destas vendas for maior que 10% a resposta deve ser "Verde". 
Se for entre -10% e 10% deve retornar "Amarela". Se o retorno form menor que -10% deve retornar "Vermelho".
*/
declare vmensagem varchar(50);
declare vresultado1 int;
declare vresultado2 int;

SELECT format(SUM(B.QUANTIDADE * B.PRECO),2) INTO vresultado1  FROM 
NOTAS A INNER JOIN ITENS_NOTAS B
ON A.NUMERO = B.NUMERO
WHERE A.DATA_VENDA = vdata1;

SELECT format(SUM(B.QUANTIDADE * B.PRECO),2) INTO vresultado2  FROM 
NOTAS A INNER JOIN ITENS_NOTAS B
ON A.NUMERO = B.NUMERO
WHERE A.DATA_VENDA = vdata2;

if sum((vresulta1 - vresultado2) / vresultado2 * 100) >= 10 then
    set vmensagem = "Verde";
elseif sum((vresulta1 - vresultado2) / vresultado2 * 100) >= -10 and sum((vresulta1 - vresultado2) / vresultado2 * 100) < 10 then
    set vmensagem = "Amarelo";
else
    set vmensagem = "Vermelho";
    
end if;

select vresultado1,vresultado2,vmensagem;



END
#	Time	Action	Message	Duration / Fetch

0 1 16:46:41 Apply changes to comparativo_vendas Error 1458: Incorrect routine name 'comparativo_vendas ' SQL Statement:

DROP procedure IF EXISTS comparativo_vendas

Alguém sabe me dizer o porque de eu está recebendo esse erro?

3 respostas
CREATE PROCEDURE `sp_comparativo_vendas ` (vdata1 date,vdata2 date)
BEGIN
/*
Esta procedure compara as vendas em duas datas (Estas duas datas serão parâmetros da SP).
Se a variação percentual destas vendas for maior que 10% a resposta deve ser "Verde".
Se for entre -10% e 10% deve retornar "Amarela". Se o retorno form menor que -10% deve retornar "Vermelho".
*/
declare vdirefenca float;
declare vresultado1 float;
declare vresultado2 float;

/*
Obtém o valor total das vendas na data vdata1.
*/
SELECT format(SUM(B.QUANTIDADE * B.PRECO),2) INTO vresultado1  FROM 
NOTAS A INNER JOIN ITENS_NOTAS B
ON A.NUMERO = B.NUMERO
WHERE A.DATA_VENDA = vdata1;

/*
Obtém o valor total das vendas na data vdata2.
*/
SELECT format(SUM(B.QUANTIDADE * B.PRECO),2) INTO vresultado2  FROM 
NOTAS A INNER JOIN ITENS_NOTAS B
ON A.NUMERO = B.NUMERO
WHERE A.DATA_VENDA = vdata2;

/*
Calcula a variação percentual entre as duas datas.
*/
set vdiferenca = (vresultado1 - vresultado2) /vresultado2 * 100;

if vdiferenca >= 10 then
    select "Verde";
elseif vdiferenca >= -10 and vdiferenca < 10 then
    select  "Amarelo";
else
    select "Vermelho";
    
end if;

/*
Retorna o valor total das vendas em cada data, bem como a variação percentual entre as duas datas.
*/
#select vresultado1,vresultado2,vmensagem;



END

Fiz de outra forma e o erro persiste.

CREATE PROCEDURE sp_comparativo_vendas (vdata1 date,vdata2 date)

Havia um espaço no nome da procedure.

Oi, Vagner! Beleza?

Desculpe a demora em te responder.

Fico feliz em saber que conseguiu solucionar o seu problema! Além disso, obrigada por compartilhar com o pessoal do fórum como você corrigiu este erro, isso pode ajudar estudantes que estão enfrentando algo semelhante ao criarem uma stored procedure.

Continue com esse olhar atento durante os seus estudos. Caso outras dúvidas apareçam, sinta-se confortável para postá-las aqui no fórum.

Um forte abraço, Vagner!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software