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 NummerWert1Wert2Wert5
from MyFile
tablemyfunc(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/MYRPGFUNC1SRCFILE(MYLIB/QRPGLESRCDBGVIEW(*ALL)

CRTSRVPGM SRVPGM(MYLIB/MYRPGFUNC1EXPORT(*ALL
Jemand einen Tipp für mich?

Gruß
Ronald