Обсуждение: passing array as argument and returning an array in plpgsql
Hi all,
I am using postgresql7.4. How to handle arrays in plpgsql. How can
I pass an array. Is it possible to retrieve values from an array by
indexing it like
argument : '{1,2,3}'
Return value : varchar array
Variables :
---------
a alias for $1
b _varchar
Usage :
-----
b[1] = a[1];
b[2] = a[2];
return b;
Is it possible.
TIA,
--
regards,
Deepa K
hello
It is possible
CREATE OR REPLACE FUNCTION foo(anyarray) RETURNS anyarray AS '
DECLARE b integer[];
BEGIN b := $1; b[1] := b[1] + 1;
RETURN b;
END;
' LANGUAGE plpgsql;
testdb011=> select foo(ARRAY[1,2,3]);
foo
---------
{2,2,3}
(1 řádka)
Regards
Pavel
I got this when I was searching for something else. I will forward this to you. http://archives.postgresql.org/pgsql-general/2003-11/msg00852.php CREATE or REPLACE FUNCTION foo(integer[]) RETURNS int AS 'DECLARE a alias for $1; index integer := 1; total integer := 0; BEGIN WHILE a[index] > 0 LOOP total := total + a[index]; index := index + 1; END LOOP; RETURN total; END; ' LANGUAGE 'plpgsql'; test=> select foo('{1,2}'); foo ----- 3 (1 row) On Tue, 2003-12-16 at 03:25, K. Deepa wrote: > Hi all, > I am using postgresql7.4. How to handle arrays in plpgsql. How can > I pass an array. Is it possible to retrieve values from an array by > indexing it like > > argument : '{1,2,3}' > Return value : varchar array > > Variables : > --------- > > a alias for $1 > b _varchar > > Usage : > ----- > > b[1] = a[1]; > b[2] = a[2]; > > return b; > > Is it possible. > > TIA, -- Jenny Zhang Open Source Development Lab 12725 SW Millikan Way, Suite 400 Beaverton, OR 97005 (503)626-2455 ext 31
Jenny Zhang wrote:
Jenny,
although this is old but i find it worth mentioning tom's
comment on it. I hit your comment on facing similar issue.
The cited example is pretty iffy since it assumes that the valid array
entries are all > 0. In recent PG version you can use the array_upper
and array_lower functions instead:
for i in array_lower(a,1) .. array_upper(a,1) loop
-- do something with a[i]
end loop;
regards, tom lane
>I got this when I was searching for something else. I will forward this
>to you.
>http://archives.postgresql.org/pgsql-general/2003-11/msg00852.php
>CREATE or REPLACE FUNCTION foo(integer[]) RETURNS int AS
>'DECLARE
> a alias for $1;
> index integer := 1;
> total integer := 0;
>BEGIN
> WHILE a[index] > 0
> LOOP
> total := total + a[index];
> index := index + 1;
> END LOOP;
>
> RETURN total;
> END;
>' LANGUAGE 'plpgsql';
>
>
>
>test=> select foo('{1,2}');
> foo
>-----
> 3
>(1 row)
>On Tue, 2003-12-16 at 03:25, K. Deepa wrote:
>
>
>>Hi all,
>> I am using postgresql7.4. How to handle arrays in plpgsql. How can
>>I pass an array. Is it possible to retrieve values from an array by
>>indexing it like
>>
>>argument : '{1,2,3}'
>>Return value : varchar array
>>
>>Variables :
>>---------
>>
>>a alias for $1
>>b _varchar
>>
>>Usage :
>>-----
>>
>>b[1] = a[1];
>>b[2] = a[2];
>>
>>return b;
>>
>>Is it possible.
>>
>>TIA,
>>
>>