[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.114

    Frage zum Cast beim SQL

    Hallo *all, ich habe eine Verständnisfrage zum Cast.

    Habe folgende Formel hier:
    Right('0000000000' concat Varchar(Dec(CSRC1.ums2012, 8, 2)), 10)

    Und die Daten die zur Summe führen (Ausschnitt)
    PHP-Code:
    000014 2013              4350  20.130.112          319680,000 
    000015 2013              4350  20.130.112           49896
    ,000 
    000016                                                        
    000017                                SUMME       1336826
    ,520 
    Wie man sieht habe ich 8 Vorkamma und 2 Nachkommastellen er kommt mir aber mit folgender FEhlermeldung:
    PHP-Code:
     Nachricht . . . :   Datenzuordnungsfehler in Teildatei QSQPTABL.           
     
    Ursache  . . . . :  Bei Feld (Cast(ReferenceVar(1), Long Packed(31,3)) AS  
       
    Short Packed(8,2)) im Satz mit Nummer 0 und Format *FIRST in Teildatei   
       QSQPTABL mit Nummer 1 der Datei QSQPTABL in Bibliothek QSYS2 ist wegen   
       Fehlercode 2 ein Datenzuordnungsfehler aufgetreten
    Fehlercodes und ihre 
       Bedeutung
    :                                                               
         
    Dezimalfeld enthält ungültige Daten.                               
         
    Signifikante Ziffer wurde abgeschnitten
    Klar ich könnte das Feld größer definieren aber ich würde gerne verstehen wo sein Problem ist.

    GG

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    Ich verstehe ehrlich gesagt die Frage nicht. Die Fehlermeldung sagt ja dass das Problem darin liegt ein Long Packed(31,3) Feld auf Dec (8, 2) zu kürzen.
    Du würdest dadurch falsche Daten erhalten (wenn du einen Wert hättest der dec (8, 2) übersteigen würde).

    lg Andreas

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Wenn --- Dann.
    Er macht es ja bei weit über 1.000 Kunden. Und wie Du siehst passt die Zahl ja.

    GG

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Korrektur:
    Wo passiert denn der Fehler eigentlich?
    Wenn du z.B. 1336826,520 versuchst auf 8, 2 zu casten wirst du einen fehler bekommen, da du instesammt 9 Stellen hast. Und du dabei aber auf 8 Stellen verringern willst.
    Last edited by andreaspr@aon.at; 05-09-13 at 12:52. Grund: Korrektur

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da sich SQL ja um den Inhalt nun mal nicht kümmert, wird durch den Cast eines langen Feldes in ein kurzes Feld eben eine Warnung ausgegeben, die zu Verlust von Daten führen könnte.

    Solche Dinge sollte man vermeiden, ins besonders wenn bei u.U. Millionen von Sätzen dadurch das Joblog zugemüllt wird und sogar der Job (wenn Systemwerte entsprechend eingestellt sind) angehalten werden kann.
    Im Zweifel wird bei *WRAP auch noch jedesmal ein Joblog ausgegeben.
    Da geht dann sogar die Performance in die Knie.

    Wenn du sicher bist, dass der Inhalt passt, musst du halt mehrere Schritte verwenden:

    dec(dec(substr(digits(MyField), Start, Länge), 10, 0) / 100, 8, 2)
    * case when MyField < 0 then -1 else 1 end

    Start und Länge hängen dann halt von der Ursprungsgröße ab.
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Je nach Release steht dir auch die skalare Funktion MOD zur Verfügung:

    mod(trunc(myfield, 2), 100000000)
    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

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Korrektur:
    Wo passiert denn der Fehler eigentlich?
    Wenn du z.B. 1336826,520 versuchst auf 8, 2 zu casten wirst du einen fehler bekommen, da du instesammt 9 Stellen hast. Und du dabei aber auf 8 Stellen verringern willst.
    Das war mein Denkfehler, ich bin beim cast davon ausgegangen das er 8 Stellen vor dem Komma und 2 nach dem Komma macht, richtig ist aber das die Gesamte Zahl 8 Stellen hat wovon 2 Nachkommastellen sind.

    Das kommt davon wenn man copy paste macht und sich nicht durchliest was cast bedeutet.

    Handbücher lesen war früher nicht das schlechteste da wußte man hinterher wovon man spricht.

    GG

Similar Threads

  1. SQL mit Cast in Where-Bedigung
    By Daechsle in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 05-09-13, 10:17
  2. SQL Frage Datum cjjmmtt
    By camouflage in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 14-12-12, 10:52
  3. SQL Frage
    By Bratmaxxe in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 24-01-07, 19:17
  4. Frage zu SQL UserDefinedFunction
    By cbe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 24-08-06, 17:30
  5. Eine Frage zu SQL / Time
    By Jenne in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 22-08-05, 11:37

Berechtigungen

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