Re: How to pass array of values to a stored procedure - Mailing list pgsql-sql

From Tony Wasson
Subject Re: How to pass array of values to a stored procedure
Date
Msg-id 6d8daee30607181024w74cf4673gf2f55066219dc21@mail.gmail.com
Whole thread Raw
In response to How to pass array of values to a stored procedure  (Curtis Scheer <Curtis@DAYCOS.com>)
Responses Re: How to pass array of values to a stored procedure  ("Tony Wasson" <ajwasson@gmail.com>)
List pgsql-sql
On 7/18/06, Curtis Scheer <Curtis@daycos.com> wrote:
> Does anyone have any examples of how I would make a stored procedure in
> plpgsql that would allow for passing a list or arrays of values to be used
> in an sql IN clause?  Like so: select * from table where field1 in (values).
>

Here's a very simple example. However, I think passing arrays of INTs
around is dirty. I wasn't able to do this without a FOR ...IN EXECUTE
statement.

CREATE TABLE ids
(       id      INTEGER       , PRIMARY KEY (id)
);

INSERT INTO ids VALUES (1);
INSERT INTO ids VALUES (2);
INSERT INTO ids VALUES (3);

CREATE OR REPLACE FUNCTION example_array_input(INT[]) RETURNS SETOF ids AS
$BODY$
DECLARE       in_clause ALIAS FOR $1;       clause  TEXT;       rec     RECORD;
BEGIN       -- conver the array to a text string and make it LOOK like an
IN statement       clause := in_clause;       clause := trim(leading '{' FROM clause);       clause := trim(trailing
'}'FROM clause);
 
       FOR rec IN EXECUTE 'SELECT id FROM ids WHERE id IN (' || clause || ');'       LOOP               RETURN NEXT
rec;      END LOOP;       -- final return       RETURN;
 
END
$BODY$ language plpgsql;

SELECT * FROM example_array_input('{1,2,4,5,6}'::INT[]);


pgsql-sql by date:

Previous
From: Tom Lane
Date:
Subject: Re: How to pass array of values to a stored procedure
Next
From: "Tony Wasson"
Date:
Subject: Re: How to pass array of values to a stored procedure