Anmelden

View Full Version : *on/*off bei Prozedurenschnittstelle



mk
16-04-24, 07:55
Hallo zusammen,

Ob es an V7R5 liegt kann ich nicht sagen:

Ich habe folgenden Fall

Eine Prozedur wird so aufgerufen

nameProzedur ( aVariable :*off) ;

Der Service / Empfänger ist so definiert


dcl-proc nameProzedur export;
dcl-pi *n ind;
aVariable packed(18) const;
pSchalterRead ind const;
END-PI;


In der Proz. erfogt diese sql


exec sql
UPDATE xxxx SET BerichtUserRead = :pSchalterRead,
CHANGEUSER = :PgmUser
WHERE RECID = :aVariable ;



Bei dem Aufruf erfolgt folgende Meldung


Wert für Spalte oder Variable BERICHTUSERREAD zu lang.SQLCOD= -404 SQLSTATE= 22001


Weitere Nachrichteninformationen Nachrichten-ID . . . . : SQL0404 Bewertung . . . . . . : 30Nachrichtenart . . . . : DiagnoseSendedatum . . . . . . : 16.04.24 Sendezeit . . . . . . : 06:11:01 Nachricht . . . : Wert für Spalte oder Variable BERICHTUSERREAD zu lang.Ursache . . . . : In einer Anweisung INSERT, UPDATE, MERGE, SET, VALUES INTO oder GET DIAGNOSTICS ist ein Wert angegeben, der die maximale Länge für Zeichenfolgen, die in BERICHTUSERREAD gespeichert werden können, überschreitet. Die Länge von BERICHTUSERREAD ist 1, und die Länge der Zeichenfolge ist 5.Fehlerbeseitigung: Länge der Zeichenfolge von 5 auf maximal 1 verringern und Anforderung wiederholen.




Ich habe im Debugger in der Var. pSchalterRead aber nur 1 oder 0
und das Feld BerichtUserRead ist mit Char 1 definiert.

Warum meint die Maschine das es 5 Zeichen wären :-)



Hat jemand auch so ein Verhalten ?

Gruß
Michael

Fuerchau
16-04-24, 08:37
Ja, da ind vom typ bool ist und nicht vom Typ char(1). Da es im RPGLE jedoch keinen Bool gibt, musst du den Wert nach char(1) übertragen.
Das hatte ich letztens auch festgestellt, dass es da wohl eine erweiterte Prüfung gibt.