como pegar o registro anterior e somar com registro atual usando fecth ?
como pegar o registro anterior e somar com registro atual usando fecth ?
Oi, Caique! Como vai?
Desde já, peço desculpas pela demora em retornar.
Para somar um registro anterior ao atual com fetch, podemos utilizar o seguinte código:
CREATE OR REPLACE FUNCTION calcular_soma() RETURNS INTEGER AS $$
DECLARE
valor_anterior INTEGER;
valor_atual INTEGER;
resultado INTEGER;
cursor_dados CURSOR FOR SELECT coluna FROM tabela;
BEGIN
-- Abrindo o cursor
OPEN cursor_dados;
-- Lendo o primeiro registro
FETCH cursor_dados INTO valor_atual;
-- Inicializando o valor anterior com o primeiro registro
valor_anterior := valor_atual;
-- Iterando sobre os registros restantes
LOOP
-- Lendo o próximo registro
FETCH cursor_dados INTO valor_atual;
-- Saindo do loop se não há mais registros
EXIT WHEN NOT FOUND;
-- Realizando a soma
resultado := valor_anterior + valor_atual;
-- Atualizando o valor anterior com o valor atual
valor_anterior := valor_atual;
END LOOP;
-- Fechando o cursor
CLOSE cursor_dados;
RETURN resultado;
END;
$$ LANGUAGE plpgsql;
Para um melhor entendimento da função acima, observe as explicações abaixo:
INTEGER
, que será o resultado da nossa soma.valor_anterior
, valor_atual
e resultado
, declaradas no bloco DECLARE
, as quais serão usadas para armazenar os valores durante o processamento da função.cursor_dados
para percorrer os registros da tabela. FETCH cursor_dados INTO valor_atual
. Isso significa que o valor da coluna do primeiro registro da tabela é atribuído à variável valor_atual
.valor_anterior
é inicializada com o valor de valor_atual
, pois não há um valor anterior no primeiro momento. LOOP
para iterar pelos registros restantes, fazendo com que a soma entre valor_anterior
e valor_atual
seja atribuída à variável resultado
. valor_anterior
é atualizada com o valor de valor_atual
para ser utilizado na próxima iteração!No final da função, usamos a cláusula RETURN
, a qual retornará o valor da variável resultado
, que pode ser obtido com o SELECT
abaixo:
SELECT calcular_soma();
Caique, espero ter ajudado. Contudo, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema!
Fico à disposição em caso de dúvidas.
Até mais!