Em 9 de março de 2010 22:19, Tiago Kepe <[email protected]> escreveu:
>
> 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.
>
Aqui funcionou:
bdteste=# CREATE OR REPLACE FUNCTION teste_array(inout _array integer[]) AS $$
bdteste$# BEGIN
bdteste$# FOR i IN 1..array_upper(_array, 1) LOOP
bdteste$# _array[i] := _array[i]+9;
bdteste$# END LOOP;
bdteste$# RETURN;
bdteste$# END;
bdteste$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
bdteste=# SELECT teste_array(ARRAY[1,2,3,4,5]);
teste_array
------------------
{10,11,12,13,14}
(1 registro)
Osvaldo
PS.: note que array é palavra reservada.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral