Thread: passing array as argument and returning an array in plpgsql

passing array as argument and returning an array in plpgsql

From
"K. Deepa"
Date:
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



Re: passing array as argument and returning an array in

From
Pavel Stehule
Date:
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


Re: passing array as argument and returning an array in

From
Jenny Zhang
Date:
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



Re: passing array as argument and returning an array in

From
Rajesh Kumar Mallah
Date:
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,
>>
>>