> 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

Responder a