Hallo,
ich verzweifle langsam an einem Parameterproblem. Ich habe ein RPG-Serviceprogramm, dass ich als SQL-UDF zur Verfügung stellen möchte. Das RPG-Programm läuft im RPG-Umfeld einwandfrei. Nur die UDF bekomme ich nicht zum Laufen:

Die UDF übergibt nur die ersten 3 Parameter. Ich habe das debugged. Die Parameter kommen korrekt im RPG an und das Rückgabe-Clob sieht zum Zeitpunkt des Return auch vollkommen korrekt aus.

RPG:
Code:
dcl-proc DAXWS_createErrorJSON export;
   dcl-pi *n varucs2(60000);
      i#_routine  varchar(100) const;
      i#_errCode  varchar(40)  const;
      i#_errMsg   varucs2(300) const options(*nopass);
      i#_errField varchar(100) const options(*nopass);
      i#_msgType  char(1)      const options(*nopass);
      i#_errorMsgDS likeds(COPY__###_errorMsgDS_templ) const options(*nopass);
      i#_zusatz   varchar(20) const options(*nopass);
   end-pi;                                        

dcl-s clobDS2 sqltype(dbclob:60000) ccsid(1200);  //dbclob = Double Byte Clob


...

return %trim(%subst(clobDS2_data:1:clobDS2_len));
Hier die komplette UDF:
(Man beachte die Double Byte Codierung nvarchar!)
Code:
create or replace function edpgmlib/DAXWS_createErrorJSON (
 i#_routine varchar(100),
 i#_errCode varchar(40),
 i#_errMsg nvarchar(300) default '' )
 returns nvarchar(10000)
 specific edpgmlib/DAXWS_createErrorJSON
 language rpgle
 not deterministic
 modifies sql data
 called on null input
 disallow parallel
 external name 'EDPGMLIB/DAXWS908A(DAXWS_CREATEERRORJSON)'
 parameter style general;


Wenn ich die SQL-Funktion aufrufe, bekomme ich:
12:29:28 FAILED [VALUES - 0 rows, 11.937 secs] 1) [Code: -443, SQL State: 38501] [SQL0443] *N Ursache . . . . : Von einem Auslöserprogramm, einer externen Prozedur oder einer externen Funktion wurde ein Fehler erkannt und an SQL zurückgegeben. Ist der Fehler in einem Auslöserprogramm aufgetreten, ...


Die Frage ist aus meiner Sicht: Wie bekomme ich den Rückgabewert varucs2(60000) auf ein passendes SQL-Feld gemappt? Ich habe es auch schon mit dbclob(60000) ccsid 1200 versucht. Hatte auch keinen Erfolg.

Dieter