[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    79

    Dezimaldatenfehler im SQL

    Hallo iSeries-Gemeinde,

    ich kämpfe mit /36-Daten. In einem 2-stelligen gezonten Feld sind in manchen Sätzen Blanks. Die Datei wird mit COBOL-Pgm gepflegt, an die ich nicht ran komme. Nun muss ich aber mit SQL die Datei einlesen. --> "Auswahlfehler in Feld-xy".
    QRY hat da eine Einstellmöglichkeit Dezimalfehler zu ignorieren. Gibts sowas auch bei SQL? Mit Funktionen wie translate, digits, substr, hex und Kombinationen daraus klappt es nicht. Hab ich Sätze mit Blanks im Griff, klappt es wieder nicht bei den "normalen" Sätzen.
    Eure Hilfe wär echt super!
    Gruß Armin

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dies kannst du nur per embedded SQL lösen, also mit einem Programm.
    Für Variablen kannst du einen Anzeiger definieren, so dass Datenfehler vom Programm erkannt werden können:

    d Anz1 5I 0
    d Anz2 5I 0

    fetch mycursor into :Feld1 :Anz1, :Feld2 :Anz2, ...

    Anzx = -1 => Null-Flag
    Anzx = -2 => Datenfehler

    In diesem Fall wird der Satz gelesen und kein Fehler gemeldet.
    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 2005
    Beiträge
    79
    Na wenn das keine prompte Antwort ist!
    Funktioniert das auch in der where Klausel?

    Es handelt sich um die Lieferwoche. Ich möchte 2 gezonte Felder Lieferjahr und Woche mit concat zusammensetzen und dann diesen Bereich mit between selektieren.

    Übrigens gibt es auch eine Routine für die Ermittlung der KW aus einem Datum?
    Danke
    Armin

  4. #4
    Registriert seit
    May 2002
    Beiträge
    1.121
    Zitat Zitat von Armin

    Übrigens gibt es auch eine Routine für die Ermittlung der KW aus einem Datum?
    Danke
    Armin
    das sollt mit week_iso(Datum) gehen
    PHP-Code:
    d Woche           s              3u 0
    ...
    c/EXEC SQL                          
    c
    set  :Woche  =  week_iso(:Datum
    C/END-EXEC 

    Gruß Ronald

  5. #5
    Registriert seit
    Sep 2005
    Beiträge
    79
    Danke für die Info.

    Aber ich brauch die Funktion im RPG!?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Für die where-Klausel geht das leider nicht, hier müssen die Daten schon korrekt sein sonst will SQL nicht.
    Ggf. musst du halt ein Korrekturprogramm (COBOL/RPG) laufen lassen, dass alle falschen Daten eben berichtigt.

    week_iso kannst du doch in RPG (siehe obiges Beispiel) direkt aufrufen.
    Allerdings ist hier Vorsicht anzuwenden. Die Funktion liefert nur eine Zahl zwischen 1 und 53, leider nicht welches Jahr !!!
    Wenn z.B. die Woche 53 gemeldet wird, kann das die 53. Woche des Vorjahres oder des aktuellen Jahres sein.
    Es muss also zusätzlich geprüft werden, ob z.B. MONTH(Datum) = 12 ist.

    Also:

    if week_iso(datum) = 53
    if month(datum)=12 then
    myyear = year(datum) - 1
    else
    myyear = year(datum)
    endif
    eindif

    das gleiche gilt bei Woche 1:

    if week_iso(datum) = 1
    if month(datum)=12 then
    myyear = year(datum) + 1
    else
    myyear = year(datum)
    endif
    eindif

    Schade, dass es keine korrekte Funktion gibt, die mir Jahr + Woche zusammenhängend gibt.
    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
    May 2002
    Beiträge
    1.121
    PHP-Code:
    d Datum           s               d   datfmt(*eur)     
    d Woche           s              3u 0                  
    d WoTag           s              3u 0                  
    d Jahr            s              4s 0                  
    d                                                      
    d parm_Dat        s              8a                    
    d parm_WoTag      s             10a                    
    d parm_DayOf      s              1a                    
    d parm_Woche      s              2a                    
    d parm_Jahr       s              4                     
    d                                                      
    d Datum_num       s              8  0                  
    d                                                      
    d                 ds                                   
    d $woche                        10a                    
    d                                     dim
    (7)           
    d                         1     10a   inz('Montag    ')
    d                        11     20a   inz('Dienstag  ')
    d                        21     30a   inz('Mittwoch  ')
    d                        31     40a   inz('Donnerstag')
    d                        41     50a   inz('Freitag   ')
    d                        51     60a   inz('Samstag   ')
    d                        61     70a   inz('Sonntag   ')
                                                           
    c     *entry        plist                              
    c                   parm                    parm_Dat   
    c                   parm                    parm_WoTag 
    c                   parm                    parm_DayOf 
    c                   parm                    parm_Woche 
    c                   parm                    parm_Jahr  
    c                                                      
    c                   move      parm_Dat      datum_num  
    c                   move      datum_num     datum      
    c                                                      
    c
    /EXEC SQL                                             
    c
    set  :Woche  =  week_iso(:Datum)                    
    C/END-EXEC                                             
    c
    /EXEC SQL                                             
    c
    set  :WoTag  =  DayOfWeek_iso(:Datum)               
    C/END-EXEC                                                 
    c                                                          
    c
    *                                                         
    c                   Select                                 
    c                   When      woche 
    1                    
    c                              
    and                         
    c                             %SubDt(Datum: *M) = 12       
    c                   
    eval      Jahr =  %SubDt(Datum: *Y) + 1
    c                   When      woche 
    >= 52                  
    c                              
    and                         
    c                             %SubDt(Datum: *M) = 1        
    c                   
    eval      Jahr =  %SubDt(Datum: *Y) - 1
    c                   Other                                  
    c                   
    eval      Jahr =  %SubDt(Datum: *Y)    
    c                   EndSl                                  
    c
    *                                                         
    c                   eval      parm_WoTag  $Woche(Wotag)  
    c                   move      wotag         parm_DayOf     
    c                   move      woche         parm_woche     
    c                   move      Jahr          parm_Jahr
    c
    *                                                   
    c                   return 
    Urheber an der Quelle müsste die Birgitta gewesen sein (man sollte mich korrigieren wenn es nicht so ist)

    Gruß Ronald

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    79
    Also größten Dank - Ihr seid unglaublich.
    So schnell und kompetent wünscht man sich manche Hotline.
    Wie´s aussieht könnte mein PGM funktionieren.

    Allen ein schönes Wochenende.
    Armin

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
  •