Anmelden

View Full Version : udf ohne ergebniss



Seiten : [1] 2 3

ILEMax
13-09-06, 09:15
Guten Tag,
Wir können neuerdings in userer ERPSoftware jede x-beliebige Datei in einem Subfile anzeigen.(PF/LF/VIEW) Daher beschäftige ich mich mit SQL.
Nach eineigen erfolgreichen versuchen mit View's möchte ich nun mal eine UDF versuchen.
diese:
create function pnesu31
(iProd varchar(14),
iFM1 dec(11, 3),
iFM2 dec(11, 3),
iFM3 dec(11, 3),
iFM4 dec(11, 3),
iLort varchar(3))
returns dec(11,3)
language sql modifies sql data begin declare summe dec(11, 3);
return (select sum(nemge0) from mne where nephas = '3' and
nestat = '1' and
neprod = iProd and
nemge1 = iFM1 and
nemge2 = iFM2 and
nemge3 = iFM3 and
nemge4 = iFM4 and
nelort = iLort) ;
end


Die Function wird erstellt.

ein select PNESU31('xxx', 1, 2, 3, 4, 'AAL') from lib/MNE gibt nur '-' zurück

ein select sum(nemge0) from ... (wie die Funktion bringt die echten Zahlen

Was ist falsch ?

danke
Max

B.Hauser
13-09-06, 09:43
Hallo,

bekommst Du eigentlich keine Meldung, dass die Funktion nicht in der Bibliothek vorhanden ist?

Versuche die numerischen Werte (also 1,2,3,4 auf Decimal zu casten). Werden numerische Ausdrücke übergeben, werden sie als integer Werte interpretiert. Da Funktionen überladen werden könnnen, d.h. eine Funktion mit dem gleichen Namen, jedoch anderen Parametern kann mehrfach in der gleichen Bibliothek vorhanden sein, wird eine Funktion die Dezimal-Felder erwartet nicht gefunden.

Birgitta

ILEMax
13-09-06, 09:56
Nein bekomme ich nicht,

hatte vorher die alpha werte in der funktion als CHAR def.

da mußte ich casten.
hab hir im forum den grund gefunden und
jetzt gehts, aber egal ob ich 1, 2, 3, 4 oder cast(1 dec(11, 3)),... angebe,
das ergebnis ist ein -

noch ne idee
Max

Fuerchau
13-09-06, 10:40
Deine Funktion soll einen Dezimalwert zurückgeben, allerdings gibst du ein Recordset zurück !!

Mach einen "Select into" und gib eine Variable zurück.

ILEMax
13-09-06, 11:29
Wie das ?
weder ein
... return SUMME as (select sum(nemge0) into SUMME where ...


noch ein
... return summe (select into summe sum(nemge0)

geht
also hab ich was falsch verstanden!
Bitte nochmal helfen
max

ILEMax
13-09-06, 11:32
oh, sorry, dadrüber ist ja noch ein return

den hab ich jetzt auch auf summe geändert und bekomme ein
SUMME der Art *SQLUDT in *LIBL nicht gefunden.

Max

Fuerchau
13-09-06, 11:38
declare summe ...
set summe = (select ...);
return summe;

ILEMax
13-09-06, 11:47
geht so nicht.

Die Funktion konnte ich nun wieder erstellen, aber das ergebniss ist das gleiche, nur '-'
mit und ohne cast der numm werte

ILEMax
13-09-06, 12:29
so nun binn ich eine idee weiter,
in der Funktion beziehe ich mich ja auf eine Datei. Diese ist anscheinend fest verdrahtet mit der zu CREATE Zeit gefundenen LIB.

wenn ich im CREATE die Lib angebe, auf die ich auch später den select mache, bekomme ich ein ergebniss.
allerdings bekomme ich in n zeilen den (richtigen) Wert, statt nur genau ein Wert.

Un das mit den festen LIB's ist ein K.O Kriterium. kann ich das umgehen ?

Max

ILEMax
13-09-06, 13:00
Das mit den vielen zeilen ist nun auch klar, ich müßte die where Bed. in dem select wiederholen.
Dann macht allerdings die Funktion so keinen Sinn.
Hmm, muß ich wohl weiter VIEW's machen

Könnte ich im SQLRPGLE Pgm sagen
/EXEC-SQL
+set :summe =PNESU31('xxx' 1, 2, 3, 4, 'xxx')
/end-exec

und dann mit Summe weiterarbeiten ?
das müste doch gehen!

nur die feste Lib stört.
Max