dschroeder
04-04-24, 12:08
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:
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:
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
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:
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:
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