Anmelden

View Full Version : udf ohne ergebniss



Seiten : 1 2 [3]

ILEMax
15-09-06, 13:10
Na ja, ich denke wenn

select PNESU31('xxx' 1 , 2 , 3 , 4, 'xx') from DATEI

mit LibList LibA (wie beim create) geht, müsste LibB auch gehen.

select PNESU31('xxx' 1 , 2 , 3 , 4, 'xx') from LibA/DATEI geht ja auch.

Werde Montag nochmal nachsehen (sysreq / offene Dateien) is ja auch ne gute Idee

Danke
Max

Fuerchau
15-09-06, 13:52
Ach jaaa.

Du machst eine Funktion in LibA die später nicht in der Libl ist.
Mach einen "select liba/PNESU31(...", qualifiziere also den Funktionsnamen.
Oder pack die LibA ans Ende deiner aktuellen Libl oder kopiere (SAVOBJ/RSTOBJ) deine Funktion in LibB.

ILEMax
18-09-06, 12:03
So, hab nun neu getestet.

Create ... return(select ...
from DATEI_OHNE_LIB ...

und anschließend

select Funktion(...) from DATEI_OHNE_LIB (in der selben Sitzung) geht.

select Funktion(...) from LIB/DATEI geht nur, wenn LIB auch in Liblist vorhanden ist. Ein 'Mitnehmen' (wie ich es mir gewünscht hätte) der fest angegebenen Lib in die Funktion geht nicht.

mit SAVOBJ / RSTOBJ übertragen geht auch.

Hab also was gelernt, bin nicht ganz zufrieden, aber kann mir zukünftig wieder ein wenig besser helfen.

Vielen Dank allen beteiligten Helfern !

gruß
Max

Fuerchau
18-09-06, 12:11
Ein "mitnehmen" einer LIB wäre auch fatal.

Wenn ich

Select ... from fileA
inner join LIBX/fileB ...

soll schließlich LIBX nicht für fileA verwendet werden.
Was anderes würdest du bei deiner Funktion nämlich nicht verlangen.

ILEMax
18-09-06, 13:16
Hm, das seh ich anders

unqualifizierte Dateiangaben IN der Funktion übernehmen die qualifizierten Dateiangaben AUßERHALB der Funktion.

Natürlich nicht 'blind' Dateiübergreifend sondern schon auf der Qualifizierung DATEINAME

aber Egal
Max

Fuerchau
18-09-06, 13:39
Da eine Funktion nur mit Parametern aufgerufen wird, kann sie von der Datei ausserhalb gar nichts wissen !

select MyFunc(Parm)
from LibA/F1 ...
join LibB/F2 ...
join LibC/F3 ...

oder

Set :MyVar = MyFunc(:Parm)

Woher soll die Funktion nun erfahren, aus welcher Lib die Daten kommen sollen ?

Dies wird nun mal zur Laufzeit durch die Umgebung gesteuert:
Bei *SYS eben *LIBL
Bei *SQL eben der aktive User bzw. die "User"LIB zur Compilezeit

Alles andere wäre vollkommen unklar.

Ansonsten baue die Funktion als externes Programm, gib die Lib als Parameter mit und mach einen dynamischen SQL draus.