Hallo zusammen

Ich habe die Anforderung aus einem BLOB Feld einer AS400 Tabelle, welches ein Programmobjekt für eine Android App beinhält (ca. 5 MB), mittels REST Service über den IBM i integrated web services server, dieses als BASE64 String zur Verfügung zu stellen.

Grundsätzlich dachte ich, das mit folgendem SQL zu machen, aber das funktioniert leider nicht, da der BLOB Inhalt zu groß ist. SYSTOOLS.BASE64ENCODE ist auf 2732 Zeichen beschränkt.

Code:
Select cast(systools.base64encode(Datei) AS clob ccsid 1208) as Datei from Versionsverwaltung
where programm = 'StaplerTerminal.apk' and versionsnr = '1.0.5';
Daher war dann mein Ansatz, das BLOB Feld in einem CLOB (CCSID 1208) als BASE64 zu speichern. Dies wollte ich mittels apr_base64_encode_binary bewerkstelligen. Die Funktion habe ich aus einem Foreneintrag übernommen. Nur komme ich auf keinen grünen Zweig, da ich, egal was ich anstelle, immer falsche BASE64 Daten erzeuge.

Code:
dcl-s Blob sqltype(BLOB:16773100);                 
dcl-s Clob sqltype(CLOB:16773100) CCSID(1208);     
dcl-s DateiClob sqltype(CLOB:16773100) CCSID(1208);
dcl-s ClobOut sqltype(CLOB:16773100) CCSID(1208);  
dcl-s   LocString   like(Clob);      
dcl-s   LocBase64   like(Clob);      

exec sql                                                           
   select datei into :Blob,  
   from Versionsverwaltung                                          
   where  programm = trim(:Programm) and versionsnr = trim(:Version)
   limit 1;                                                         

if sqlcode = 0;
  ClobOut = getBase64(Blob);                                          
  ClobOut_Len = %len(%trimr(ClobOut));                                
  exec sql                                                             
    update Versionsverwaltung set DateiClob = :ClobOut                
    where aktuell='1' and                                             
   where  programm = trim(:Programm) and versionsnr = trim(:Version);
endif;

*inlr = *on;   
return;        
 
//  _______________________________________________________________
//  getBASE64 Encoded String   ____________________________________
                                                                  
 dcl-proc getBase64;                                              
   dcl-pi *n     like(Clob) rtnparm; // Encoded String            
     PiString    like(Blob);                                      
   end-pi;                                                        
                                                                  
   dcl-s   LocString   like(Blob) inz;     // Source String       
   dcl-s   LocBase64   like(Clob) inz;     // Encoded String      
   dcl-s   Loclength   int(10);            // StringLength        
   dcl-s   LocEnclen   int(10);            // EncodedLength       
                                                                  
   LocString = %trimr(PiString);                                  
   LocLength = %len(%trimr(LocString));       // String-Length    
                                                                  
   LocEnclen = encbase64bin(%addr(LocBase64): // Encode Base64    
                            %addr(LocString):LocLength);          
                                                                  
   if LocEnclen > *zero;                      // Encoded Length   
     return %subst(LocBase64:1:LocEnclen - 1);// without last null
   else;                                                          
     return *blanks;             
   endif;                        
                                 
 end-proc;
Hat jemand eine Idee, was ich hier falsch mache oder ist meine Herangehensweise falsch? Bin für jeden Tipp dankbar.

Grüße, Ingo