Liebe Gemeinde!
Zurzeit beschäftige ich mich UDFs. Funktionen, welche mir einen Wert zurück geben, sind nicht das Problem.
Jetzt taste ich mich aber an UDFs mit einer Table als Rückgabe ran.
Wenn ich die Funktion in SQL schreibe, dann klappt das auch ganz gut.
Nun habe ich aber eine bauen wollen, welche ein RPG-Programm aufruft, um zu einer übergebenen Nummer verschiedene Werte zurückzugeben.
Funktion und Programm wurden ohne Fehler gewandelt. Wenn ich die Funktion aufrufe, und das Service-PGM debugge, sehe ich auch, dass die Werte vor dem RETURN im Programm gefüllt sind.
Nur die Funktion zeigt mir bei dem Select nichts an.
Jemand einen Tipp für mich, wo ich was falsch habe? Oder wie ich die Sache anders angehen könnte?
Hatte das Ganze auch schon als Procedure geschrieben. Da hat es funktioniert. Nur möchte ich aber es aber lieber als Funktion haben, damit ich es in einem Select verwenden.
zum Beispiel so:
PHP-Code:
Select Nummer, Wert1, Wert2, Wert5
from MyFile, table( myfunc(Nummer))
Function:
PHP-Code:
create or replace function MyLib.MyFunc ( inNummer char(8) )
Returns table
(
Wert1 char(10),
Wert2 char(10),
Wert3 char(10),
Wert4 char(10),
Wert5 char(10)
)
language RPGLE
NO SQL
FINAL CALL
DISALLOW PARALLEL
NOT FENCED
external name 'MYLIB/MYRPGFUNC1(MYRPGFUNC1)'
parameter style sql
;
RPG
PHP-Code:
**free
ctl-opt nomain;
dcl-c TRUE *on;
dcl-c FALSE *off;
dcl-proc MYRPGFUNC1 export;
dcl-pi *n ;
inNummer char(8) ;
outWert1 char(10) ;
outWert2 char(10) ;
outWert3 char(10) ;
outWert4 char(10) ;
outWert5 char(10) ;
n_Nummer int(5)
n_Wert1 int(5) ;
n_Wert2 int(5) ;
n_Wert3 int(5);
n_Wert4 int(5);
n_Wert5 int(5);
Status char(5);
Function varchar(517) ;
Specific varchar(128) ;
errorMsg varchar(1000);
CallType int(10) ;
end-pi;
monitor;
//...Hier jetzt noch diverser Code, welcher Wert1-Wert5 befüllt
on-error;
endmon;
Status = '02000';
return;
end-proc;
Das Ganze wird gewandelt mit:
PHP-Code:
CRTRPGMOD MODULE(MYLIB/MYRPGFUNC1) SRCFILE(MYLIB/QRPGLESRC) DBGVIEW(*ALL)
CRTSRVPGM SRVPGM(MYLIB/MYRPGFUNC1) EXPORT(*ALL)
Jemand einen Tipp für mich?
Gruß
Ronald
Bookmarks