From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Shakil Shaikh <sshaikh(at)hotmail(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Array Parameters in EXECUTE |
Date: | 2009-06-11 09:47:52 |
Message-ID: | 162867790906110247q5d4e9a66nc8ca0008c58b6739@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hello
8.4 suport USING clause - so there is possible use array variable directly.
regards
Pavel Stehule
2009/6/11 Shakil Shaikh <sshaikh(at)hotmail(dot)com>:
> Hi,
>
> Here's my general situation: I have a function which takes in an optional
> ARRAY of Ids as so:
>
> RETURN QUERY SELECT * FROM a WHERE a.id = ANY(v_ids) or v_ids is null;
>
> However it seems that the ...or v_ids is null... bit forces a sequential
> scan on a. Reading this list, it seems the best way to get over this is to
> dynamically prepare a statement, perhaps something like this:
>
> DECLARE
> v_base text;
> v_where text := '';
> v_rec record;
> BEGIN
> v_base := 'SELECT * FROM a';
>
> IF (v_ids IS NOT NULL) then
> v_where := ' WHERE a.id = ANY(v_ids)';
> END IF;
>
> FOR v_rec IN EXECUTE v_base || v_where LOOP
> RETURN NEXT v_rec;
> END LOOP;
>
> I picked up the looping returning trick next elsewhere in this list, and
> presume that's the only way to handle dynamically returning a SET OF.
> However the problem I'm having is with substituting in the ARRAY parameter
> in to the WHERE string. Obviously the above doesn't quite work since the
> named parameter v_ids isn't valid in the statement. I probably need some
> kind of array_tostring function to write out the array explicitly, but I was
> wondering if there was any other way to do this since the excessive
> parameter processing could potentially defeat the purpose of using arrays in
> the first place!
>
> Thanks
>
> Shak
>
> --
> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>
From | Date | Subject | |
---|---|---|---|
Next Message | Alban Hertroys | 2009-06-11 10:06:43 | Re: When to use cascading deletes? |
Previous Message | Shakil Shaikh | 2009-06-11 09:12:22 | Array Parameters in EXECUTE |