Hallo zusammen,
ich habe mich ein wenig mit ChatGpt unterhalten und ChatGpt behauptet, dass ich eine SQL UDF schreiben kann, die ein RPGLE-Serviceprogramm benutzt, das In/Out Parameter hat. Es hat beim Codieren bisher nicht geklappt. Aber mal die Frage: Kann das gehen?

Konkret: Mein Serviceprogramm hat folgende Parameterschnittstelle:
Code:
dcl-proc DAX99##_checkAuthorization export;
   dcl-pi *n varchar(10000);
      i#token varchar(10000) const;
      i#_clientId varchar(50) const;
      i#_role varchar(100) const;
      i#pgmName char(10) const;
      i#procName varchar(60) const;
      i#dl_rec packed(15) const;
      r#httpStatusCode int(10);
      r#username varchar(100) options(*nopass);
   end-pi;
Der letzte Parameter ist optional, den will ich in der UDF gar nicht ansprechen. Aber der vorletzte Parameter "r#httpStatusCode" ist nicht als const definiert. Kann ich das Serviceprogramm trotzdem in der UDF benutzen?


Hier die UDF:
Code:
create or replace function edpgmlib/DAX99##_checkAuthorizationUdf (
 i#_token     varchar(10000),
 i#_clientId  varchar(50),
 i#_role      varchar(100),
 i#_pgmName   char(10),
 i#_procName  varchar(60),
 i#_dl_rec    dec(15),
 inout i#_httpStatusCode integer )
 returns nvarchar(10000)
 specific edpgmlib/DAX99##_checkAuthorizationUdf
 language rpgle
 not deterministic
 modifies sql data
 called on null input
 disallow parallel
 EXTERNAL NAME 'EDPGMLIB/DAX99##01(DAX99##_CHECKAUTHORIZATION)'
 parameter style general;

Das SQL lässt sich nicht ausführen, solange ich das Schlüsselwort inout vor dem Parameter " i#_httpStatusCode" stehen habe. Wenn ich inout wegnehme, lässt es sich ausführen. Aber wohin würde das RPG-Programm denn seinen geänderten Parameter hinschreiben, wenn ich ein Literal übergebe?

LG,
Dieter