View Full Version : SQL-Problem:SQL0406
Hallo, ich bekomme bei folgendem Statement einen SQl-Fehler SQL0406 der Art1 (Überlauf) für die Spalte AUFTRAGNR, immer wenn der Wert für die Spalte BETRAG1 >= 800.00 ist:
Insert into ZENRX120PF(AUFTRDATE, LSNR, LSDATE, ORGEINHEIT,
REFERENZNR, POSITION, UPOSITION, ARTNRLIEF, EANCODE, MARKE, ARTBEZEI
CH, LSTGART, ANZAHL, AUFTRAGNR, BETRAG1, BETRAG2, SKONTOP, SKONTOB,
MWSTB, MWSTP, STATNR, STATTEXT, INFOTEXT, RABATTP, RABATTB, FALLIGKE
IT, USRADD, TSTADD)
VALUES(null, null, null, '511', 'A20026533522', 1, null, null,
null, null, null, '520', null, NULL, 811.11, 888.11,
3.00, 26.40, 121.36, 16.00, null, null, null, null, null,
DATE('2002-05-15'), 'SYSTEM', CURRENT_TIMESTAMP)
Wird in die Spalte AUFTRAGNR ein Wert wie z.B. '4711' eingetragen oder führe ich für die Spalte BETRAG1 den CAST "DECIMAL('811.11', 15, 2, '.')" durch, tritt das Problem nicht auf. Das OS ist auf V4R5. Kann mir irgend jemand helfen.
Danke und Gruss
S2
Hallo,
wie hast Du denn das Feld in der Table definiert?
Wilfried.
Als Decimal(15,2)
DSPFFD sagt:
BETRAG1 GEPACK 15 2 8 327 Beide GSBetrag Brutto inkl
. MwSt
Gruss S2
Hallo,
das kann eigentlich nicht sein.
vesuche doch einmal ein update auf einen bestehenden Satz. Kann der Betrag dann auch nicht größer sein?
Gruß,
Wilfried.
Guten Tag zusammen
habe ein mir unverständliches Problem. Versuche mit embedded SQL in RPG folgendes durchzuführen :
C/EXEC SQL
C+ UPDATE LIB/FILE SET
C+ FELD3 = round((100/FELD2),4)*FELD1*-1
C+ WHERE FELD2> 0 AND FELD1 >0
C/END-EXEC
Felddefinition ist PACKED 17, 6
Leider ohne grossen Erfolg. Immer wieder bekomme ich den SQL0406 mit Überlauf. Im JOBLOG befinden sich die Hinweise:
-CPF5035 - Datenzuordnungsfehler - 2 Signifikante Daten abgeschnitten
Führe ich das Statement interaktiv aus, wird die Berechnung durchgeführt.
Danke für Eure Hilfe... Finde dieses Forum genial und habe bis heute die Lösung immer gefunden :-))
Hallo,
bevor Du irgendwas anderes versuchst, füge zunächst ein paar Blanks ein, vor allem beim ROUND-Befehl, nach dem Komma.
(Kann auch sein, dass die Anzeige hier im Forum sie verschluckt hat!)
SQL interpretiert solche die Angaben ,Zahl als Dezimalstelle und kommt damit ins schleudern.
Vielleicht war das das Problem:
C/EXEC SQL
C+ UPDATE LIB/FILE SET
C+ FELD3 = round((100/FELD2), 4) * FELD1 * -1
C+ WHERE FELD 2 > 0 AND FELD1 > 0
C/END-EXEC
Danke für die schnelle Antwort.... Leider kein Erfolg.
FELD3 = round((100/FELD2), 4) klappt problemlos (auch ohne Runden).
Sobald die 1. Multiplikation ins Spiel kommt erscheint der Fehler.
Mit diesen Zahlen passierts:
F1 = 2298.9
F2 = 212.5
auch diese Felder sind definiert mit Packed 17,6.
Wie bereits erwähnt, interaktiv wird alles berechnet wie gewünscht.
Haben wir eventuell ein Problem mit dem PTF Stand? Wir arbeiten mit R5V3
Das Problem sind auch hier die Zwischenergebnisse:
Bei "100 / Feld2" wird ggf. ein Zwischenergebnis bereits ohne NK berechnet.
Versuch es mal mit "100.000000 / Feld2".
Wenn das nicht klappt, musst du ggf. zusätzlich das Feld2 casten, da es zu viele NK's enthält: dec(feld2, 11, 2).
Auch die Multiplikation stellt ggf. ein Problem dar, da hier ein Zwischenfeld mit 12 NK's benötigt würde. Also sind auch hier mittels Cast vorher die NK's zu kürzen.
Zwischen embedded SQL und Dialog-SQL besteht leider immer ein Unterschied, da die embedded Statements ja prepared werden.
Wie Fuerchau sagt, liegt es daran, dass die numerischen Felder zu groß werden.
Da Du bereits auf Release V5R3M0 bist, kannst Du hast Du die Möglichkeit das Maximum der Anzahl Ziffern und Anzahl Nachkomma-Stellen von 31 auf 63 zu setzen.
Dies kann entweder im Compile-Befehl CRTSQLRPGI über die OPTION DECRESULT oder durch Einfügen eines entsprechenden SET OPTION-Statements mit der entsprechenden Auswahl.
Damit sollte es keine Probleme mehr geben.
Zusätzlich könntest Du noch das Ergebnis der Rundung entsprechend casten. (Hier z.B. auf 7,4)
C/EXEC SQL
C+ UPDATE LIB/FILE SET
C+ FELD3 = Cast(round((100/FELD2), 4) as Dec(7, 4)) * FELD1 * -1
C+ WHERE FELD 2 > 0 AND FELD1 > 0
C/END-EXEC
Birgitta
Herzlichen Dank euch beiden. Klappt hervorragend....
Freundliche Grüsse