Liste von Werten an Funktion übergeben

Hallo zusammen!

Wie kann ich eine Werteliste an eine Funktion übergeben um sie in einem IN (…) Statement verwenden zu können?
Also etwa so:

create or replace function f(parameter ?)
  returns hstore
  as $$
  DECLARE
  ...
  BEGIN
  ...
  select bla from blubb where name in (parameter)
  ...

  END;
  $$ language plpgsql;

Wie muß ich parameter deklarieren?
Meine letzte Idee war, das als Array zu übergeben und dann einen String draus zu machen in das sql einzubauen und per execute auszuführen. Ist mir aber zu umständlich, ausserdem würde ich die Liste auch gerne als Subselect erzeugen können.

Gruß Uwe

ARRAY ist vielleicht schon der passende Wert, man kann damit dann auch einiges machen:

test=*# create or replace function my_func(int[]) returns int as $$declare s int; begin select into s sum(unnest) from unnest($1); return s; end;$$language plpgsql;
CREATE FUNCTION
Time: 0,504 ms
test=*# select my_func(array[1,2,3]);
 my_func
---------
       6
(1 row)

Time: 0,362 ms
test=*# select my_func (array_agg(a)) from (select 1 as a union all select 2 union all select 3)s;
 my_func
---------
       6
(1 row)

Mit unnest() bekommst das quasi wieder in eine Tabelle aufgedröselt, mit der Du dann weiter hantieren kannst.

HTH, Andreas

Genial, funktioniert bestens. Das kommt in die Sammlung ‘Wildes und gefährliches SQL’ :slight_smile:
Vielen Dank!
Gruß Uwe

Made my day :wink:


Andreas