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 list
[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
|