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
Bookmarks