Variable Anzahl von Parametern in Funktion

Variable Anzahl von Parametern in Funktion

am 21.10.2008 14:48:29 von Philipp Lawitschka

Hallo zusammen,

ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Paramete=
rn=20
an eine Funktion zu übergeben? Ich habe eine Funktion concat, die als=20
Parameter Text aufnimmt und verknüpft wieder zurückgibt:

CREATE OR REPLACE FUNCTION concat(text, text) RETURNS text AS $$

SELECT $1 || $2;

$$ LANGUAGE 'sql';


Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bisher=20
habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Parameter=
n=20
habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Parameter=20
werden. Deshalb wäre eine variable Anzahl nicht schlecht.

Vielen Dank und Grüße,
pl

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 14:53:00 von andreas.kretschmer

am Tue, dem 21.10.2008, um 14:48:29 +0200 mailte Philipp Lawitschka folg=
endes:
> Hallo zusammen,
>=20
> ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
> überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Parame=
tern=20
> an eine Funktion zu übergeben? Ich habe eine Funktion concat, die als=
=20
> Parameter Text aufnimmt und verknüpft wieder zurückgibt:
>=20
> CREATE OR REPLACE FUNCTION concat(text, text) RETURNS text AS $$
>=20
> SELECT $1 || $2;
>=20
> $$ LANGUAGE 'sql';
>=20
>=20
> Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bisher=
=20
> habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Paramet=
ern=20
> habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Paramete=
r=20
> werden. Deshalb wäre eine variable Anzahl nicht schlecht.

In Zukunft ist das passende Stichwort:
http://www.depesz.com/index.php/2008/07/31/waiting-for-84-va riadic-functi=
ons/


Andreas
--=20
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 17:17:14 von robert.friessleben

QW0gMjEuIE9rdG9iZXIgMjAwOCAxNDo1MyBzY2hyaWViIEEuIEtyZXRzY2ht
ZXIKPGFuZHJlYXMua3JldHNjaG1lckBzY2hvbGxnbGFzLmNvbT46Cj4gYW0g
IFR1ZSwgZGVtIDIxLjEwLjIwMDgsIHVtIDE0OjQ4OjI5ICswMjAwIG1haWx0
ZSBQaGlsaXBwIExhd2l0c2Noa2EgZm9sZ2VuZGVzOgo+PiBIYWxsbyB6dXNh
bW1lbiwKPj4KPj4gaWNoIGhhYmUgaW4gZGVyIERva3VtZW50YXRpb24gbmlj
aHRzIGRhcsO8YmVyIGdlZnVuZGVuIG9kZXIgaGFiZSBlcwo+PiDDvGJlcmxl
c2VuLiBHaWJ0IGVzIGVpbmUgTcO2Z2xpY2hrZWl0IGVpbmUgdmFyaWFibGUg
QW56YWhsIHZvbiBQYXJhbWV0ZXJuCj4+IGFuIGVpbmUgRnVua3Rpb24genUg
w7xiZXJnZWJlbj8gSWNoIGhhYmUgZWluZSBGdW5rdGlvbiBjb25jYXQsIGRp
ZSBhbHMKPj4gUGFyYW1ldGVyIFRleHQgYXVmbmltbXQgdW5kIHZlcmtuw7xw
ZnQgd2llZGVyIHp1csO8Y2tnaWJ0Ogo+Pgo+PiBDUkVBVEUgT1IgUkVQTEFD
RSBGVU5DVElPTiBjb25jYXQodGV4dCwgdGV4dCkgUkVUVVJOUyB0ZXh0IEFT
ICQkCj4+Cj4+IFNFTEVDVCAkMSB8fCAkMjsKPj4KPj4gJCQgTEFOR1VBR0Ug
J3NxbCc7Cj4+Cj4+Cj4+IEVzIGthbm4gYWxsZXJkaW5ncyBzZWluLCBkYXNz
IGRpZSBBbnphaGwgZGVyIFBhcmFtZXRlciB2YXJpaWVydC4gQmlzaGVyCj4+
IGhhYmUgaWNoIGVzIHNvIGdlbMO2c3QsIGRhc3MgaWNoIGViZW4gMyBGdW5r
dGlvbmVuIG1pdCAyLCAzLCA0IFBhcmFtZXRlcm4KPj4gaGFiZS4gSW4gWnVr
dW5mdCBrw7ZubnRlIGVzIGFiZXIgYXVjaCB2b3Jrb21tZW4sIGRhc3MgZXMg
bWVociBQYXJhbWV0ZXIKPj4gd2VyZGVuLiBEZXNoYWxiIHfDpHJlIGVpbmUg
dmFyaWFibGUgQW56YWhsIG5pY2h0IHNjaGxlY2h0Lgo+Cj4gSW4gWnVrdW5m
dCBpc3QgZGFzIHBhc3NlbmRlIFN0aWNod29ydDoKPiBodHRwOi8vd3d3LmRl
cGVzei5jb20vaW5kZXgucGhwLzIwMDgvMDcvMzEvd2FpdGluZy1mb3ItODQt
dmFyaWFkaWMtZnVuY3Rpb25zLwoKVW5kIGJpcyBkYWhpbiB3w6RyZSB2aWVs
bGVpY2h0IGVpbiBBcnJheSBhbHMgenUgQXJndW1lbnQgZWluIHBhc3NlbmRl
cgpXw7xyZ2Fycm91bmQ/ClJvYmVydAoKLS0gClNlbnQgdmlhIHBnc3FsLWRl
LWFsbGdlbWVpbiBtYWlsaW5nIGxpc3QgKHBnc3FsLWRlLWFsbGdlbWVpbkBw
b3N0Z3Jlc3FsLm9yZykKVG8gbWFrZSBjaGFuZ2VzIHRvIHlvdXIgc3Vic2Ny
aXB0aW9uOgpodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL21haWxwcmVmL3Bn
c3FsLWRlLWFsbGdlbWVpbgo=

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 17:32:55 von muellerrobert

QW0gMjEuIE9rdG9iZXIgMjAwOCAxNDo1MyBzY2hyaWViIEEuIEtyZXRzY2ht
ZXIKPGFuZHJlYXMua3JldHNjaG1lckBzY2hvbGxnbGFzLmNvbT46Cj4gYW0g
IFR1ZSwgZGVtIDIxLjEwLjIwMDgsIHVtIDE0OjQ4OjI5ICswMjAwIG1haWx0
ZSBQaGlsaXBwIExhd2l0c2Noa2EgZm9sZ2VuZGVzOgo+PiBIYWxsbyB6dXNh
bW1lbiwKPj4KPj4gaWNoIGhhYmUgaW4gZGVyIERva3VtZW50YXRpb24gbmlj
aHRzIGRhcsO8YmVyIGdlZnVuZGVuIG9kZXIgaGFiZSBlcwo+PiDDvGJlcmxl
c2VuLiBHaWJ0IGVzIGVpbmUgTcO2Z2xpY2hrZWl0IGVpbmUgdmFyaWFibGUg
QW56YWhsIHZvbiBQYXJhbWV0ZXJuCj4+IGFuIGVpbmUgRnVua3Rpb24genUg
w7xiZXJnZWJlbj8gSWNoIGhhYmUgZWluZSBGdW5rdGlvbiBjb25jYXQsIGRp
ZSBhbHMKPj4gUGFyYW1ldGVyIFRleHQgYXVmbmltbXQgdW5kIHZlcmtuw7xw
ZnQgd2llZGVyIHp1csO8Y2tnaWJ0Ogo+Pgo+PiBDUkVBVEUgT1IgUkVQTEFD
RSBGVU5DVElPTiBjb25jYXQodGV4dCwgdGV4dCkgUkVUVVJOUyB0ZXh0IEFT
ICQkCj4+Cj4+IFNFTEVDVCAkMSB8fCAkMjsKPj4KPj4gJCQgTEFOR1VBR0Ug
J3NxbCc7Cj4+Cj4+Cj4+IEVzIGthbm4gYWxsZXJkaW5ncyBzZWluLCBkYXNz
IGRpZSBBbnphaGwgZGVyIFBhcmFtZXRlciB2YXJpaWVydC4gQmlzaGVyCj4+
IGhhYmUgaWNoIGVzIHNvIGdlbMO2c3QsIGRhc3MgaWNoIGViZW4gMyBGdW5r
dGlvbmVuIG1pdCAyLCAzLCA0IFBhcmFtZXRlcm4KPj4gaGFiZS4gSW4gWnVr
dW5mdCBrw7ZubnRlIGVzIGFiZXIgYXVjaCB2b3Jrb21tZW4sIGRhc3MgZXMg
bWVociBQYXJhbWV0ZXIKPj4gd2VyZGVuLiBEZXNoYWxiIHfDpHJlIGVpbmUg
dmFyaWFibGUgQW56YWhsIG5pY2h0IHNjaGxlY2h0Lgo+Cj4gSW4gWnVrdW5m
dCBpc3QgZGFzIHBhc3NlbmRlIFN0aWNod29ydDoKPiBodHRwOi8vd3d3LmRl
cGVzei5jb20vaW5kZXgucGhwLzIwMDgvMDcvMzEvd2FpdGluZy1mb3ItODQt
dmFyaWFkaWMtZnVuY3Rpb25zLwoKVW5kIGJpcyBkYWhpbiB3w6RyZSB2aWVs
bGVpY2h0IGVpbiBBcnJheSBhbHMgQXJndW1lbnQgZWluIHBhc3NlbmRlciBX
w7xyZ2Fycm91bmQ/ClJvYmVydAoKLS0gClNlbnQgdmlhIHBnc3FsLWRlLWFs
bGdlbWVpbiBtYWlsaW5nIGxpc3QgKHBnc3FsLWRlLWFsbGdlbWVpbkBwb3N0
Z3Jlc3FsLm9yZykKVG8gbWFrZSBjaGFuZ2VzIHRvIHlvdXIgc3Vic2NyaXB0
aW9uOgpodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnL21haWxwcmVmL3Bnc3Fs
LWRlLWFsbGdlbWVpbgo=

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 17:55:24 von Albe Laurenz

Philipp Lawitschka wrote:
> ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
> überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Paramete=
rn=20
> an eine Funktion zu übergeben?

[...]=20

> Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bisher=
=20
> habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Parameter=
n=20
> habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Parameter=
=20
> werden. Deshalb wäre eine variable Anzahl nicht schlecht.

Das geht leider nicht.
Vielleicht wäre es eine Möglichkeit, ein Array zu übergeben?

Liebe Grüße,
Laurenz Albe

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 19:05:11 von Philipp Lawitschka

Albe Laurenz schrieb:
> Philipp Lawitschka wrote:
>> ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
>> überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Param=
etern=20
>> an eine Funktion zu übergeben?
>=20
> [...]=20
>=20
>> Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bishe=
r=20
>> habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Parame=
tern=20
>> habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Paramet=
er=20
>> werden. Deshalb wäre eine variable Anzahl nicht schlecht.
>=20
> Das geht leider nicht.
> Vielleicht wäre es eine Möglichkeit, ein Array zu übergeben?
>=20
> Liebe Grüße,
> Laurenz Albe
>=20

Danke für eure Antworten, werde mal probieren, ob das mit einem Array
funktioniert. Allerdings hört sich variadic auch sehr interessant an.

Grüße

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 19:16:24 von andreas.kretschmer

am Tue, dem 21.10.2008, um 14:48:29 +0200 mailte Philipp Lawitschka folg=
endes:
> Hallo zusammen,
>=20
> ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
> überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Parame=
tern=20
> an eine Funktion zu übergeben? Ich habe eine Funktion concat, die als=
=20
> Parameter Text aufnimmt und verknüpft wieder zurückgibt:
>=20
> CREATE OR REPLACE FUNCTION concat(text, text) RETURNS text AS $$
>=20
> SELECT $1 || $2;
>=20
> $$ LANGUAGE 'sql';
>=20
>=20
> Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bisher=
=20
> habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Paramet=
ern=20
> habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Paramete=
r=20
> werden. Deshalb wäre eine variable Anzahl nicht schlecht.

Mal von den bisherigen Antworten abgesehen folgende Fragen:
- warum sowas triviales in eine Function stecken?
- was ist, wenn eine Variable NULL ist? Dir ist klar, was dann passiert?
- was spricht gegen concat(text, concat(text,text)), falls es mal 3
Parameter sind?


Andreas
--=20
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein

Re: Variable Anzahl von Parametern in Funktion

am 21.10.2008 19:38:31 von Philipp Lawitschka

A. Kretschmer schrieb:
> am Tue, dem 21.10.2008, um 14:48:29 +0200 mailte Philipp Lawitschka fo=
lgendes:
>> Hallo zusammen,
>>
>> ich habe in der Dokumentation nichts darüber gefunden oder habe es=20
>> überlesen. Gibt es eine Möglichkeit eine variable Anzahl von Param=
etern=20
>> an eine Funktion zu übergeben? Ich habe eine Funktion concat, die al=
s=20
>> Parameter Text aufnimmt und verknüpft wieder zurückgibt:
>>
>> CREATE OR REPLACE FUNCTION concat(text, text) RETURNS text AS $$
>>
>> SELECT $1 || $2;
>>
>> $$ LANGUAGE 'sql';
>>
>>
>> Es kann allerdings sein, dass die Anzahl der Parameter variiert. Bishe=
r=20
>> habe ich es so gelöst, dass ich eben 3 Funktionen mit 2, 3, 4 Parame=
tern=20
>> habe. In Zukunft könnte es aber auch vorkommen, dass es mehr Paramet=
er=20
>> werden. Deshalb wäre eine variable Anzahl nicht schlecht.
>=20
> Mal von den bisherigen Antworten abgesehen folgende Fragen:
> - warum sowas triviales in eine Function stecken?

weil für die Anwendung bereits MySQL queries vorhanden sind. Die
function concat eben auch. Ich müsste die queries nicht von der db
abhängig machen (zumindest nicht dort, wo ich es vermeiden kann).

> - was ist, wenn eine Variable NULL ist? Dir ist klar, was dann passiert=
?

yep

> - was spricht gegen concat(text, concat(text,text)), falls es mal 3
> Parameter sind?

auch keine schlechte Idee

--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein