Senhores,

Tenho a seguinte PROCEDURE:

CREATE OR REPLACE FUNCTION correg.somatorio_correicao(cod_resolucao integer,
> cod_membro integer, cod_orgexecucao integer, data_inicial date, data_final
> date, cod_campos integer[])
>   RETURNS integer AS
> $BODY$
> DECLARE
>    subtotal integer;
>    total integer;
>    tam_array integer;
>    membro varchar;
>    orgexecucao varchar;
> BEGIN
>    /*descobre o tamanho do array passado por parametro:*/
>    tam_array := array_upper(cod_campos, 1);
>
>    /*inicializa o contador*/
>    total := 0;
>
>    /*ajustando parametros na query*/
>    membro := '';
>    orgexecucao := '';
>
>    if cod_membro = 0
>    then
>       membro := ' r.fk_tmpmembro = ' || cod_membro || ' and ';
>    end if;
>
>    if cod_orgexecucao = 0
>    then
>       orgexecucao := ' r.fk_tmporgaoexecucao = ' || cod_orgexecucao || '
> and ';
>    end if;
>
>    /*varredura no array:*/
>    for i in 1..tam_array loop
>       execute '
>           select
>             (select
>                 sum(v.quantidade)
>             from correg.valor v
>             join correg.raf r on
>                 r.id = v.fk_raf
>             join rh.orgaoexecucao oe on
>                 oe.fk_orgao = r.fk_tmporgaoexecucao
>             join rh.orgaoadministracao oa on
>                 oa.id = oe.fk_orgaoadministracao
>             join rh.comarca cx on
>                 cx.id = oa.fk_comarca
>             where
>                 v.fk_campo = c.id and
>                 (r.data between ' || data_inicial || ' and ' || data_final
> || ') and
>                 ' || membro || '
>                 ' || orgexecucao || '
>                 r.excluido is false
>             ) as quantidade
>           into subtotal
>           from correg.campo c
>           where
>             c.excluido is false and
>             c.fk_modelo = ' || cod_resolucao || '
>             and c.id = ' || cod_campos[i] || ';';
>
>           /*vai construindo o valor total*/
>           total := total + subtotal;
>    end loop;
>
>    /*retorna a soma dos codigos:*/
>    return total;
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE;
> ALTER FUNCTION correg.somatorio_correicao(integer, integer, integer, date,
> date, integer[]) OWNER TO postgres;
>

O banco de dados aceita o codigo acima sem acusar nenhum tipo de problema,
mas quando tento executar a query abaixo no pgadmin:

select correg.somatorio_correicao(2, 0, 0, date '2009-10-01', date
> '2009-11-01', array[1097,1098,1099,1100,1101,1102]);
>

O console de mensagens me retorna o seguinte erro:

ERROR:  EXECUTE of SELECT ... INTO is not implemented yet
> CONTEXT:  PL/pgSQL function "somatorio_correicao" line 30 at execute
> statement
>
>
> ********** Erro **********
>
> ERROR: EXECUTE of SELECT ... INTO is not implemented yet
> SQL state: 0A000
> Contexto: PL/pgSQL function "somatorio_correicao" line 30 at execute
> statement
>

A linha 30 está localizada antes do comentário: */*varredura no array:*/*

A versão do banco que utilizo é a 8.1, creio que o comando EXECUTE não seja
compatível com esta versão, alguém conhece alguma alternativa para o código
acima?

Grato,
Daniel

-- 
Atenciosamente,
Daniel Falcão

Analista e Desenvolvedor de Software
http://lattes.cnpq.br/2208735579737258
http://embuar.blogspot.com
http://twitter.com/embuar
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a