[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2002
    Beiträge
    19

    Red face Ungültige Werte in numerischen Feldern

    Hallo Kolleginnen und Kollegen !

    Wir haben ein Thema (Problem/Herausfoderung), dass in einigen Dateien (DDS beschrieben) und dort in mehreren Datensätzen ungültige Daten (Hex'40') in numerischen Feldern stehen. Verursacht durch ältere RPG-Programme.

    Wir möchten nun mit SQL diese fehlerhaften Sätze bereinigen, um nicht pro Datei jeweils ein RPG-Programm schreiben zu müssen.

    Es wäre sehr hilfreich wenn uns jemand auf die Schnelle bei einer Lösung unterstützen könnte.

    Mit freundlichen Grüßen
    Harald Wallukat
    Am Grafacker 2
    40789 Monheim
    Telefon +49 2173 32503
    Mobile +49 171 4137771
    harald.wallukat@web.de

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Per SQL hast du leider keine Chance!
    SQL versucht die Daten zu lesen, kann dies aber nicht, da sie ja ungültig sind.
    Dies kannst du nur per Programm, wobei hier die RPG-Runtime ja beim READ einen Fehler bringt sobald das Feld angesprochen wird.

    Dies ereichst du bereits, wenn die Felder als E DS definiert sind.

    Den READ kannst du per MONITOR abfangen, da RPG ja intern per MOVE in die DS überträgt und bei ungültigen Daten einen MCH-Fehler bekommt.
    Welches Feld das dann ist, kann man nicht herausfinden, aber wenigstens hat man die Satznummer (INFDS).

    Alternativ könnte auch ein CPYF ... FMTOPT(*MAP *DROP) ERRLVL(*NOMAX)funktionieren.
    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

  3. #3
    Registriert seit
    Sep 2002
    Beiträge
    19
    Danke für die schnelle Info.
    Den CPYF hatte ich getestet, aber den ERRLVL vergessen.
    Versuche ich direkt.
    Harald Wallukat
    Am Grafacker 2
    40789 Monheim
    Telefon +49 2173 32503
    Mobile +49 171 4137771
    harald.wallukat@web.de

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Bin da nicht sicher, aber kannst du nicht in einer coalesce Gruppe das Feld durch 1 dividieren oder in einer case Anweisung diese division auf NULL abfragen?

    update datei set numfeld1 = case when numfeld1/1 = NULL then 0 else numfeld1 end

    oder
    update datei set feld = coalesce(numfeld1/1, 0)

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wenn "numfeld" ungültig ist, da nicht numerisch, stirbt der SQL und macht dann auch nichts.
    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
    Sep 2005
    Beiträge
    12
    Ich hatte buchstäblich vor Jahrzehnten 'mal Kontakt zu einem Tool namens FILESCOPE, das solche ungültigen Werte in gültige numerische Werte umändern konnte und zwar nicht nur feldweise, sondern für ganze Dateien. Hier findest Du einen link : Filescope – iSeries Data Manipulation Tool for Enhancing Programmer Productivity
    Vielleicht hilft Dir das ja weiter.

  7. #7
    Registriert seit
    Apr 2005
    Beiträge
    385
    Ich würde die Datei intern definieren und dabei die falschen *BLANKS Felder als Alpha definieren.

    Anschließend xlate x'40' 0 und gut ist.

    Allerdings kann es dabei passieren, das bei negativeren das - verloren geht

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Moin,

    vielleicht etwas spät aber trotzdem

    DAS


    zeigt wie's mir SQL geht

    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  9. #9
    Registriert seit
    Dec 2000
    Beiträge
    281

    Ungültige Werte in Num Feld

    Hallo Gemeinde :-)

    Ich hatte das vor Jahren (nach der Umstellung von S/36) mal so gelößt, dass ich die DDS der Datei eingelesen habe, damit einen RPG Quelle erstellt habe und diese mit der option
    Dezimaldatenfehler ignorieren . IGNDECERR *YES
    umgewandelt habe.
    Dieses Programm hat alle Sätze gelesen und einen Update gmeacht.

    damit waren alle nummerischen x'40' Felder nachher "sauber"
    auf 0


    Klaus

Similar Threads

  1. Datenstruktur negative Werte
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 25-02-13, 11:57
  2. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 12:44
  3. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  4. SQL UDF Prob mit leeren Feldern
    By HACHIMAN in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 22-05-06, 09:48
  5. select 10 größte Werte je Ordnungsbegriff
    By holly in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 16-05-06, 12:45

Tags for this Thread

Berechtigungen

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