Hum... é verdade, o problema está no INTO. Estava consultando a documentação
agora pouco, mas não estou encontrando bons exemplos para contornar isso.
Alguém aí pode me dar uma ajuda com esse "FOR IN EXECUTE" no contexto do
problema dessa minha procedure?

Grato,
Daniel

2009/11/18 Wolak <[email protected]>

>  O comando EXECUTE não trabalha com INTO... no seu caso a variavel
> SUBTOTAL... voce precisa executar o FOR IN EXECUTE...
>
> Tenho exemplos se precisar.
>
> Wolak.
> Email/MSN: [email protected]
>
>
>
>
>
>
> Daniel Falcão escreveu:
>
> 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 
> [email protected]https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus signature 
> database 4618 (20091118) __________
>
> The message was checked by ESET NOD32 Antivirus.
> http://www.eset.com
>
>
>
> __________ Information from ESET NOD32 Antivirus, version of virus
> signature database 4618 (20091118) __________
>
> The message was checked by ESET NOD32 Antivirus.
>
> http://www.eset.com
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a