1
resposta

Trabalhando com cursores postgresql

como pegar o registro anterior e somar com registro atual usando fecth ?

1 resposta

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:

  • Estamos trabalhando com uma função que retorna um valor do tipo INTEGER, que será o resultado da nossa soma.
  • A função utiliza as variáveis locais 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.
  • Usamos um cursor chamado cursor_dados para percorrer os registros da tabela.
  • O primeiro registro é lido do cursor usando FETCH cursor_dados INTO valor_atual. Isso significa que o valor da coluna do primeiro registro da tabela é atribuído à variável valor_atual.
  • A variável valor_anterior é inicializada com o valor de valor_atual, pois não há um valor anterior no primeiro momento.
  • Em determinado momento, o código entra em um loop usando LOOP para iterar pelos registros restantes, fazendo com que a soma entre valor_anterior e valor_atual seja atribuída à variável resultado.
  • Depois da soma, a variável 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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!