Ir para conteúdo
Fórum Script Brasil
  • 0

Erro Função PL/pgSQL


Alphak

Pergunta

Não estou coneguindo resolver o erro abaixo que ocorre em uma função PL/pgSQL que estou criando

ERRO:  não pode abrir consulta SELECT como cursor
CONTEXT:  PL/pgSQL function formula_cont_nv(integer,integer,integer,integer) line 5 at FOR sobre registros de SELECT

********** Error **********

ERRO: não pode abrir consulta SELECT como cursor
SQL state: 42P11
Context: PL/pgSQL function formula_cont_nv(integer,integer,integer,integer) line 5 at FOR sobre registros de SELECT
Função que está ocorrendo o erro:
-- Function: formula_cont_nv(integer, integer, integer, integer)

-- DROP FUNCTION formula_cont_nv(integer, integer, integer, integer);

CREATE OR REPLACE FUNCTION formula_cont_nv(mesi integer, mesf integer, anoi integer, anof integer)
  RETURNS text AS
$BODY$
DECLARE
    dados tp_formula_cont%ROWTYPE;
BEGIN
FOR dados IN     (WITH v_entradas
    AS (
        SELECT date_trunc('month', ent_data) mes
            ,sum(ent_valor) soma
        FROM entradas
        WHERE extract(year FROM ent_data) = extract(year FROM now())
        GROUP BY 1
        )
        ,v_saidas
    AS (
        SELECT date_trunc('month', sai_data) mes
            ,sum(sai_valor) soma
        FROM saidas
        WHERE extract(year FROM sai_data) = extract(year FROM now())
        GROUP BY 1
        )
    SELECT extract(year FROM gs.mes)::NUMERIC ano
        ,extract(month FROM gs.mes)::NUMERIC mes
        ,round(coalesce(e.soma, 0), 2) entrada
        ,round(coalesce(s.soma, 0), 2) saida
        ,round(coalesce(e.soma, 0) - coalesce(s.soma, 0), 2) saldo
        ,round(coalesce((100 * s.soma) / e.soma, 0), 2) percentual
    INTO dados
    FROM v_entradas e
    INNER JOIN v_saidas s ON e.mes = s.mes
    RIGHT JOIN generate_series(date_trunc('year', now()), date_trunc('year', now()) + interval '1 year - 1 month', '1 month') gs(mes) ON gs.mes = e.mes)


    LOOP
        -- can do some processing here
        execute 'INSERT INTO ' || contabilizacoes || 'VALUES' || dados;
    END LOOP;

    RETURN 'OK';
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION formula_cont_nv(integer, integer, integer, integer)
  OWNER TO alphak_gp;

Obrigado pela atenção

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Se você usar INTO o select retorna vazio. Retire o INTO e você não precisa de um execute:

loop
insert into contabilizacoes (ano, mes, entrada, saida, saldo, percentual) 
values (
    dados.ano, dados.mes, dados.entrada, dados.saida, dados.saldo, dados.percentual
)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...