Re: Instaltiating an ARRAY within a function

Поиск
Список
Период
Сортировка
От Albe Laurenz
Тема Re: Instaltiating an ARRAY within a function
Дата
Msg-id D960CB61B694CF459DCFB4B0128514C2AE0A1B@exadv11.host.magwien.gv.at
обсуждение исходный текст
Ответ на Instaltiating an ARRAY within a function  ("Abraham, Danny" <danny_abraham@bmc.com>)
Список pgsql-general
Danny Abraham wrote:
> ===========================================
>
> CREATE OR REPLACE FUNCTION arr( inout x varchar[] )
> AS
> $Z$
> DECLARE
>   i integer;
> BEGIN
> select ARRAY['Danny','Eissam','Moshe'] into x;
> end;
> $Z$ LANGUAGE 'plpgsql' VOLATILE;
>
> ===========================================
>
> CREATE OR REPLACE FUNCTION callarr()
> returns integer
> AS
> $Z$
> DECLARE
>   x varchar[6];
> BEGIN
> perform arr(x);
> RAISE NOTICE 'x[1]=%',x[1];
> return 0;
> end;
> $Z$ LANGUAGE 'plpgsql' VOLATILE;
>
> ===========================================
>
> select callarr();
> NOTICE:  x[1]=<NULL>  ??? Should have been DANNY
>
>
> Should it work?

Not the way you wrote it.
You are confused by output parameters which do not work the way one
might expect. They are just a simple syntax for composite return types.

CREATE FUNCTION arr(INOUT x varchar[])
is synonymous to
CREATE FUNCTION arr(x varchar[]) RETURNS varchar[]

So your example should work if you replace

PERFORM arr(x);
with
x := arr(x);

Yours,
Laurenz Albe

В списке pgsql-general по дате отправления:

Предыдущее
От: Thomas Kellerer
Дата:
Сообщение: Re: index organized tables use case
Следующее
От: "Leif B. Kristensen"
Дата:
Сообщение: Re: Hijack!