Anmelden

View Full Version : Schnittstellenparameter mit variabler Länge



M Scheid
24-11-09, 16:24
Hallo zusammen,

ich habe folgendes Problem:
Ich möchte aus einen Java-Programm über eine SQL Procedure ein RPGLE-Programm aufrufen.
In Java ist der Parameter als string definiert.
In der SQL Procedure und dem RPGLE-Programm ist der Parameter als CHARACTER 32766 definiert.Wenn in dem Parameter nur 100 Zeichen - also nicht die anschließenden Leerzeichen - drin sind, kommen im Java-Programm 32722 Zeichen an.

Wie kann die Schnittstelle variabel gestaltet werden?

Danke schonmal für die Hilfe.

Fuerchau
24-11-09, 16:35
Definiere das Feld als VARCHAR(32766) und im RPGLE als VARYING.

M Scheid
25-11-09, 08:56
Das hatte ich schon probiert. Im Detail:
In der SQL-Procedure habe ich 3 Parameter mit VARCHAR(32766) definiert. Als ich das Script zur Erstellung der Procedures ausführen wollte, kam ein Fehler, dass bei VARCHAR die maximale Länge 32740 sein kann. Habe ich gemacht.

Im RPGLE Programm habe ich die 3 Parameter ebenfalls mit 32740 und dem Schlüsselwort varying definiert.

Ergebnis:
Der 1. Parameter so gefüllt ist, wie ich es erwartet habe.
Der 2. Parameter ist leer, obwohl Daten enthalten sein sollten.
Der 3. Parameter wird in einem Dump als Not Adressable angegeben.

Was mache ich falsch?

Fuerchau
25-11-09, 09:38
Wie sieht deine Prozedurdeklaration beim CREATE PROCEDURE und dein *ENTRY aus ?
Irgendwas passt da nicht so ganz.

Jeder Parameter wird als eigener Eintrag und nicht als Array übergeben!

M Scheid
25-11-09, 10:21
Hier das Script für die Erstellung der Procedure:
CREATE PROCEDURE MCCRTVDOMLEVEL1
(IN USR CHAR (10),
IN PWD CHAR (10),
IN SID CHAR (10),
OUT STS DEC (3, 0),
OUT SND CHAR (10),
IN E1MAX DEC (5, 0),
IN E1STR DEC (5, 0),
OUT E1CNT DEC (5, 0),
OUT E1OVF DEC (1, 0),
IN E1TYP CHAR (5),
OUT E1OID VARCHAR (32740),
OUT E1KNZ VARCHAR (32740),
OUT E1PMT VARCHAR (32740))
LANGUAGE RPGLE NOT DETERMINISTIC
MODIFIES SQL DATA EXTERNAL NAME
HTDOMSP001 PARAMETER STYLE GENERAL;

Die Entry-List sieht so aus:
parm E1USR 10
parm E1PWD 10
parm E1SID 10
parm E1STS 3 0
parm E1SND 10
parm E1MAX 5 0
parm E1STR 5 0
parm E1CNT 5 0
parm E1OVF 1 0
parm E1TYP 5
parm E1OID
parm E1KNZ
parm E1PMT

Die Definition der Parameter E1OID, E1KNZ, E1PMT wir folgt:
D E1OID S 32740A varying
D E1KNZ S 32740A varying
D E1PMT S 32740A varying

Fuerchau
25-11-09, 10:46
Ggf. gibt es die Einschränkung, dass die Pufferlänge aller Parameter zusammen 32740 nicht übersteigen darf.

Ggf. funktioniert es dann besser, wenn als Typ CLOB gewählt wird, oder verkürze die Parameter mal testweise auf 8000.