> Date: Tue, 9 Mar 2010 20:01:42 -0300
> From: [email protected]
> To: [email protected]
> Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função
>
> Em 9 de março de 2010 19:59, Tiago Kepe <[email protected]> escreveu:
> >
> >
> >> Date: Tue, 9 Mar 2010 19:50:47 -0300
> >> From: [email protected]
> >> To: [email protected]
> >> Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função
> >>
> >> Em 9 de março de 2010 19:29, Tiago Kepe <[email protected]> escreveu:
> >> > Oi pessoal,
> >> >
> >> > Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada
> >> > que
> >> > me ajudasse.
> >> >
> >> > Preciso passar um array como parâmetro para uma função e ela me
> >> > retornará o
> >> > mesmo array alterado.
> >> > Vi algumas explicações na net e a função atualmente está assim:
> >> >
> >> > CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS
> >> > $$
> >> > DECLARE
> >> > array integer[];
> >> > BEGIN
> >> > array := $1;
> >> > FOR i IN 1..10 LOOP
> >> > array[i] := i+9;
> >> > END LOOP;
> >> > RETURN array;
> >> > END;
> >> > $$ LANGUAGE plpgsql;
> >> >
> >> > Porém está retornando o seguinte erro:
> >> >
> >> > psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função
> >> > existente
> >> > HINT: Primeiro utilize DROP FUNCTION.
> >> >
> >> > P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não
> >> > acho necessário pq tem um REPLACE, mas em todo caso.
> >> >
> >>
> >>
> >> Tente:
> >>
> >> CREATE OR REPLACE FUNCTION teste_array(inout array integer[]) AS $$
> >> BEGIN
> >> FOR i IN 1..array_upper(array, 1) LOOP
> >> array[i] := i+9;
> >> END LOOP;
> >> RETURN;
> >> END;
> >> $$ LANGUAGE plpgsql;
> >>
> >> Osvaldo
> >
> > Não funcionou, dá erro de sintaxe.
> >
>
>
> Qual versão do PostgreSQL você está usando?
>
> Osvaldo
A versão eh 8.3.
O erro ocorre quando eu passo um vetor como parâmetro e retorno um vetor,
mesmo que eu não manipule esse vetor na função, fiz um teste assim, deixo um
vetor como parâmetro, não faço nada com esse vetor na função, dai retorno outro
vetor que eh um variável interna, mas ele nem compila:
CREATE OR REPLACE FUNCTION teste_array(vetor integer[]) RETURNS integer[] AS $$
DECLARE
array integer[];
BEGIN
FOR i IN 1..10 LOOP
array[i] := i+9;
END LOOP;
RETURN array;
END;
$$ LANGUAGE plpgsql;
Mas já consegui resolver por aki para o meu problema, eu não passei
mais o array como parâmetro, agora só estou retornando um array, ficou
assim:
CREATE OR REPLACE FUNCTION teste_array() RETURNS integer[] AS $$
DECLARE
array integer[];
BEGIN
FOR i IN 1..10 LOOP
array[i] := i+9;
END LOOP;
RETURN array;
END;
$$ LANGUAGE plpgsql;
Passando um vetor e alterando ele na função, ainda não consegui fazer, para o
meu caso está resolvido, contudo, acredito que seria interessando repassar as
soluções para ajudar a comunidade.
Obrigado,
Tiago Kepe.
_________________________________________________________________
Navegue sem medo: O Internet Explorer 8 te deixa mais protegido. Baixe
gratuitamente.
http://go.microsoft.com/?linkid=9707132_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral