Funktionsargument für eine "field IN ($1)" Bedingung

From: Andreas Tille <andreas(at)an3as(dot)eu>
To: PostgreSQL <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Funktionsargument für eine "field IN ($1)" Bedingung
Date: 2010-12-16 10:54:00
Message-ID: 20101216105400.GA28859@an3as.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

[Sorry, wenn die Mail doppelt erscheinen sollte. Nach einiger Verzögerung konnte
ich die Liste nun subscriben und da meine Mail von heute früh nicht im Webarchiv
auftaucht, schicke ich sie nun noch einmal.]

Hallo,

irgendwie bekomme ich nicht die Confirmation-Mail zum subscriben, bin also nicht
subscribed und bitte um ein CC bei den Antworten - danke.

Angenommen ich habe eine Tabelle der Art:

CREATE TABLE mytable (field text, value int) ;
INSERT INTO mytable VALUES ('eins', 1);
INSERT INTO mytable VALUES ('zwei', 2);
INSERT INTO mytable VALUES ('drei', 3);

und möchte mehrere Felder in der Art

SELECT * FROM mytable WHERE field IN ('eins', 'drei');

selektieren. (Das ganze Problem ist eigentlich etwas komplexer und
daher soll die letztere Anweisung in einer Funktion untergebracht
werden. Ich habe folgendes versucht:

CREATE OR REPLACE FUNCTION test_set_of_arguments (text) RETURNS SETOF RECORD AS $$
Declare
r RECORD;
query text;
BEGIN
query = 'SELECT * FROM mytable WHERE field IN ( || $1 || ) ;';
FOR r IN EXECUTE query LOOP
RETURN NEXT r;
END LOOP;
END; $$ LANGUAGE 'plpgsql';

Wenn ich versuche, diese Funktion z.B. per

SELECT * FROM test_set_of_arguments( '''eins'', ''drei''' ) AS (field text, value int) ;

aufzurufen, erhalte ich

FEHLER: es gibt keinen Parameter $1
ZEILE 1: SELECT * FROM mytable WHERE field IN ( || $1 || ) ;
^
ANFRAGE: SELECT * FROM mytable WHERE field IN ( || $1 || ) ;
KONTEXT: PL/pgSQL function "test_set_of_arguments" line 7 at FOR-über-EXECUTE-Anweisung

Ich habe auch schon andere Möglichkeiten versucht, um den String geschickt als Argument
zu übergeben - alles schlägt fehl. Die Frage ist nun:

Wie formuliert man die Funktion bzw. den Funktionsaufruf korrekt, um das
oben beschriebene zu erreichen.

Die Bonusfrage dazu wäre noch, wie ich den Aufruf mittels
Python so formulieren kann, daß ich eine Liste als Argument
übergeben kann.

Viele Grüße

Andreas.

--
http://fam-tille.de

----- End forwarded message -----

--
http://fam-tille.de

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Nicolas Barbier 2010-12-16 11:17:00 Re: [pgsql-de-allgemein] Funktionsargument für eine "field IN ($1)" Bedingung
Previous Message Andreas 'ads' Scherbaum 2010-12-15 23:21:14 == Wöchentlicher PostgreSQL Newsletter - 12. Dezember 2010 ==