[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2002
    Beiträge
    2

    Angry 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

  2. #2
    Registriert seit
    Apr 2002
    Beiträge
    17

    Post

    Hallo,

    wie hast Du denn das Feld in der Table definiert?

    Wilfried.

  3. #3
    Registriert seit
    May 2002
    Beiträge
    2

    Post

    Als Decimal(15,2)

    DSPFFD sagt:
    BETRAG1 GEPACK 15 2 8 327 Beide GSBetrag Brutto inkl
    . MwSt


    Gruss S2

  4. #4
    Registriert seit
    Apr 2002
    Beiträge
    17

    Post

    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.

  5. #5
    Registriert seit
    Feb 2006
    Beiträge
    25

    Problem mit Überlauf in SQL

    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 :-))

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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:
    PHP-Code:
    C/EXEC SQL 
    C
    UPDATE LIB/FILE SET 
    C
    FELD3 round((100/FELD2), 4) * FELD1 * -
    C
    WHERE FELD 2 AND FELD1 0
    C
    /END-EXEC 
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2006
    Beiträge
    25
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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)

    PHP-Code:
    C/EXEC SQL 
    C
    UPDATE LIB/FILE SET 
    C
    FELD3 Cast(round((100/FELD2), 4) as Dec(74)) * FELD1 * -
    C
    WHERE FELD 2 AND FELD1 
    C
    /END-EXEC 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Feb 2006
    Beiträge
    25
    Herzlichen Dank euch beiden. Klappt hervorragend....

    Freundliche Grüsse

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •