PDA

View Full Version : Strings in SQL-UDF



Jordi Giacomo
17-01-11, 14:27
Hallo zusammen,

ich möchte gern in einem UDF ein Integer durch eine Anzahl von Punkten ersetzen, z.B. Punkte(3) soll mir '...' zurückliefern. Anscheinend ist der String aber nicht veränderbar, jedenfalls bekomme ich immer den leeren String von der ersten Zuordnung. Oder was könnte hier falsch sein?
Danke für Euer Interesse!

CREATE FUNCTION PUNKTE(STUFE INTEGER)
RETURNS VARCHAR(50)
LANGUAGE SQL
BEGIN
DECLARE STUFE INTEGER;
DECLARE ZEILE VARCHAR(50);
SET ZEILE = '';
WHILE STUFE > 0 AND STUFE < 50 DO
SET ZEILE = STRIP(ZEILE)||'.';
SET STUFE = STUFE - 1;
END WHILE;
RETURN ZEILE;
END

andreaspr@aon.at
17-01-11, 14:42
Hallo,
wundert mich, dass du das überhaupt erstellen konntest.
Entferne die Zeile:

DECLARE STUFE INTEGER;
Dann sollte es gehen.

Jordi Giacomo
17-01-11, 15:32
Danke, Andreas, das funktioniert!

Fuerchau
17-01-11, 15:53
Auch hier gilt das Lokalitätsprinzip:
Variablen, die zwischen BEGIN und END definiert werden, verbergen ausserhalb definierte Variablen. BEGIN/END lässt sich nämlich schachteln.
Deshalb gabs keinen Umwandlungsfehler.

B.Hauser
17-01-11, 17:04
ich möchte gern in einem UDF ein Integer durch eine Anzahl von Punkten ersetzen, z.B. Punkte(3) soll mir '...' zurückliefern.

Warum brauchst Du dazu überhaupt eine UDF?
Mit der skalaren Funktion kannst Du dies auch direkt haben z.B.:


Select Repeat('.', 3), Trim(MyText) concat Repeat('-', 10)
From SysIbm/SysDummy1;


Birgitta

andreaspr@aon.at
17-01-11, 17:54
Deshalb gabs keinen Umwandlungsfehler.
Ich habe mich deshalb gewundert, weil es bei mir einen Fehler gab, da diese Variable doppelt definiert wurde. (7.1)

Jordi Giacomo
17-01-11, 18:01
Auch hier gilt das Lokalitätsprinzip:
Variablen, die zwischen BEGIN und END definiert werden, verbergen ausserhalb definierte Variablen. BEGIN/END lässt sich nämlich schachteln.
Deshalb gabs keinen Umwandlungsfehler.

Danke, das macht es klar

Jordi Giacomo
17-01-11, 18:04
Warum brauchst Du dazu überhaupt eine UDF?
Mit der skalaren Funktion kannst Du dies auch direkt haben z.B.:


Select Repeat('.', 3), Trim(MyText) concat Repeat('-', 10)
From SysIbm/SysDummy1;
Birgitta

Danke, das ist auch ein guter Tip. Ich wollte das, weil es einfach zu benutzen ist, für eine Stückliste oder einen Nachrichtenbaum oder so etwas. Aber so wäre es auch gut.