Re: Array Parameters in EXECUTE
От | Pavel Stehule |
---|---|
Тема | Re: Array Parameters in EXECUTE |
Дата | |
Msg-id | 162867790906110247q5d4e9a66nc8ca0008c58b6739@mail.gmail.com обсуждение исходный текст |
Ответ на | Array Parameters in EXECUTE ("Shakil Shaikh" <sshaikh@hotmail.com>) |
Список | 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@hotmail.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@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >
В списке pgsql-general по дате отправления: