View Full Version : MCH1210 Empfängerwert zu klein
Allrounder
26-03-10, 10:19
Folgendes Problem:
Eine 10-stellige Integer-Variable wird einer RPG-Prozedur als Parameter übergeben.
Dort wird sie so auch angezeigt:
p_meinevariable: Ganze Zahl (10,0) CONST
Im SQL-Statement der Prozedur (embedded) wird sie dann verwendet. Der SQL-Precompiler macht eine gepackte Variable mit 5 Bytes daraus:
SQL_00005 129 133P 0 p_meinevariable
Das heißt neun verfügbare Stellen, bei 10-stelligem Inhalt kracht es mit MCH1210.
Hat jemand eine Lösung?
Den Wert selber in eine 10-stellige P-Variable übertragen und SQL mit dieser aufrufen.
Aber beachte, dass ggf. bei der Rückübertragung der MCH kommt.
Allrounder
26-03-10, 11:07
Den Wert selber in eine 10-stellige P-Variable übertragen und SQL mit dieser aufrufen.
Ok, so funktioniert es jetzt. Werde mir wohl angewöhnen müssen, übergebene Parameter erst einmal in lokale Variablen zu übertragen. Nicht schön, aber so funktioniert es wenigstens.
Aber beachte, dass ggf. bei der Rückübertragung der MCH kommt.
Das sollte (bei uns) kein Problem sein, da wir die Parameter zu 99 % als Konstante übergeben.
Danke für die schnelle Lösung.
Baldur's Lösung ist nur eine Notlösung!
Wenn die Variable definitiv als 10I 0 definiert ist, handelt es sich um einen Bug, der bereinigt werden muss. Prüfe zunächst ob alle PTFs installiert sind. Sofern Ihr auf dem aktuellen Stand seid, solltet Ihr den Fehler IBM melden.
Wenn die Variable mit Datentyp B definiert ist, solltest Du die Definition auf Datentyp I ändern und nochmals prüfen, was das embedded SQL dann macht.
Birgitta
Das Problem liegt hier in SQLRPG, da I-Variablen nicht unterstützt werden sondern P-Variablen generiert werden.
In SQLRPGLE verhält sich der Precompiler korrekt (V5R4):
SQL_00005 129 132I 0
Allrounder
26-03-10, 13:28
Das Problem liegt hier in SQLRPG, da I-Variablen nicht unterstützt werden sondern P-Variablen generiert werden.
In SQLRPGLE verhält sich der Precompiler korrekt (V5R4):
SQL_00005 129 132I 0
Aber hier handelt es sich um ein SQLRPGLE. Vermutlich ist es doch ein Bug.
... wie ist denn nun deine Variable im PROTOTYP und Procedure Interface deklariert???
@Baldur: SQLRPG kennt kein CONST, das ist ILE
Stimmt, der Fehler muss an anderer Stelle liegen.
Allrounder
26-03-10, 13:58
... wie ist denn nun deine Variable im PROTOTYP und Procedure Interface deklariert???
Da liegt der Hund wohl begraben.
Die Deklaration kommt aus einer Datenstruktur (Based), die als Feldreferenz dient.
D PI N
D p_meinevariable...
D LIKE(Dcl_DS.p_meinevariable)
D CONST
Verwende ich die übergebene Variable in SQL, kracht es.
Verwende ich eine lokale Variable, die auf die gleiche Datenstruktur verweist, macht er es richtig:
SQL_00005 129 132I 0
Aber warum???