PDA

View Full Version : User defined function



KM
04-08-06, 10:17
Hallo,

ich kämpfe gerade mit meiner ersten User defined function (UDF) herum und komme keinen Schritt weiter.

Ich habe ein SRVPGM erstellt, das 2 Postleitzahlen als Parameter erwartet und als Ergebnis die Entfernung zwischen beiden Postleitzahlen zurückliefert (Der Sinn davon sei jetzt mal dahingestellt). Der Prototyp ist folgendermaßen definiert:


D DISTANCE PR 8P 3
D PLZ1 6P 0 VALUE
D PLZ2 6P 0 VALUE

Das SRVPGM selbst funktioniert auch. Das hab ich schon getestet. Die zugehörige UDF hab ich folgendermaßen erstellt:


CREATE FUNCTION LIB/DISTANCE (
PLZ1 DECIMAL(6, 0) ,
PLZ2 DECIMAL(6, 0) )
RETURNS DECIMAL(8, 3)
LANGUAGE RPGLE
PARAMETER STYLE GENERAL
NOT DETERMINISTIC
NO SQL
EXTERNAL NAME 'LIB/DISTANCE(DISTANCE)';

Die UDF wird auch erstellt. Dann hab ich versucht folgendes SQL abzusetzen:


select * from kundstam where DISTANCE(DEC(63303, 6, 0), kdplza) < 50

Daraufhin erhalte ich einen Dezimaldatenfehler. Ich hab auch schon versucht die PLZ ohne den CAST anzugeben oder die PLZ per embedded SQL als Host-Variable. Das Ergebnis war immer das gleiche. Es scheint wohl nur an der Parameterübergabe zu liegen. Ich krieg's aber einfach nicht hin. Ich hab die UDF auch schon mit unterschiedlichen Parameter Styles erstellt (SQL, DB2SQL, etc.). Das hat aber alles nichts gebracht.

Was mache ich hier falsch bzw. wie muß ich numerische Parameter an eine UDF übergeben ?

Gruß,
KM

Fuerchau
04-08-06, 10:20
Die Parameterübergabe erfolgt hier immer per Reference, also lass "Value" weg !

KM
04-08-06, 10:34
oh Mann........., und ich such mir da einen ab.
Daran hat's tatsächlich gelegen. Jetzt funktioniert's.

Vielen Dank für den Hinweis !

Gruß,
KM