[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360
    OLDKDN ist in diesem Fall Numerisch.

    ich habe mir eine Datei erstellt, wo in den Sourcen die Kundennummer vorkommt.
    Manchmal kommt Sie Numerisch, manchmal auch Alpha.

    Die Längen variieren auch zwischen 5, 0 bis 13, 0 und das selbe im Alpha-bereich.
    Datei:
    Code:
    Feld               Datei             Art                   Länge  
    "SOURCE"           KNDRSLT           CHARACTER                20        
    TEILDATEI          KNDRSLT           CHARACTER                10        
    TEXT               KNDRSLT           CHARACTER                50        
    FELDNAME           KNDRSLT           CHARACTER                10        
    FELDLAENGE         KNDRSLT           CHARACTER                10        
    INFOTEXT           KNDRSLT           CHARACTER                30        
    TSTMP              KNDRSLT           TIMESTAMP
    Im Programm stopple ich folgendes Sqlstatement zusammen:
    Code:
    TEXT = %trim(%XLATE(HK:HK1:TEXT));
    
    
    SqlQry = 'INSERT INTO STATISTIK +
    SELECT char(' + %TRIM(FELDNAME) + '), +
    min(' + HK + %TRIM(SOURCE)     + HK + '), +
    min(' + HK + %TRIM(TEILDATEI)  + HK + '), +
    min(' + HK + %TRIM(TEXT)       + HK + '), +
    min(' + HK + %TRIM(FELDNAME)   + HK + '), +
    min(' + HK + %TRIM(FELDLAENGE) + HK + '), +
    COUNT(*), +
    min(' + HK + %TRIM(INFOTEXT) + HK + '), ' +
    %CHAR(SQLCOD)                             +
    ' from ' + %TRIM(TEILDATEI) + ' A ';
    
    
    IF %SCAN('A':FELDLAENGE) = *ZEROS;
      // Feld Numerisch
      SqlQry = %TRIMR(SqlQry) +
      ' WHERE exists +
      (select * from KUNDENP P +
      where dec(A.' + FELDNAME + ', 13, 0) = P.KDNNR)';
    ELSE;
      // Feld Alpha
      SqlQry = %TRIMR(SqlQry) +
      ' WHERE exists +
      (select * from KUNDENP P +
      where A.' + FELDNAME + ' = CHAR(P.KDNNR))';
    ENDIF;
    
    
    
    
    SqlQry = %TRIMR(SqlQry) +
    ' group by char(' + %TRIM(FELDNAME) + ')';
    
    
    Exec SQL
       execute immediate :SqlQry;     
    
    INSERT INTO STATISTIK              
        SELECT char(OLDKDN), ... 
        FROM MYFILE A 
        WHERE exists (select * from KUNDENP P 
                      where dec(A.OLDKDN , 13, 0) = P.KDNNR ) 
        GROUP BY char(OLDKDN)
    Hoffe es erklärt zu haben.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ist denn die Spalte OLDKDN auch tatsächlich NULL-fähig?
    Ich vermute eher, dass in dem Feld kein NULL-Wert, sondern ungültige numerische Werte (z.B. Blanks) stehen. Schau Dir mal die Hex-Werte an.
    In diesem Fall müssten zunächst die ungültigen numerischen Werte korrigiert werden, bevor Dein SQL richtig funktionieren kann.

    Vielleicht noch 2 Anmerkungen:
    1. Man sollte niemals eine Variable in einem embedded SQL mit SQL anfangen lassen. Diese Variablen hat IBM sich für den PreCompiler (SQLCA und SQLDA und sonst. Variablen) reserviert. Selbst wenn Du heute noch keine Probleme hast könnte IBM mit dem nächsten Release eine Variable SQLQRY in die Communications oder Descriptlor-Area einfügen, und dann ?
    2. Für den Vergleich ist es besser die numerischen Felder in alphanumerische zu konvertieren am besten mit VARCHAR anstatt CHAR. Bei CHAR wird mit Blanks auf die volle Länge aufgefüllt. Bei VarChar wird nur die Zahl linksbündig ausgerichtet ohne folgende Blanks ausgegeben.

    Sollte es sich tatsächlich um einen NULL-Wert handeln, kannst Du diesen auch mit Hilfe der Funktion COALESCE in einen Default-Wert z.B. 0 konvertieren.

    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

  3. #3
    Registriert seit
    Apr 2012
    Beiträge
    360
    Liebe Birgitta,

    danke für die Anmerkungen, war mir leider nicht so bewusst.

    Bisher habe ich null-Werte in der Datenbank mit upddta manipuliert.

    Ginge das auch mit Sql damit ich die Werte mit einem Update auf 0 setzten kann?



  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Sofern es sich um echte NULL-Werte handelt, ... ja
    Etwa so:

    Code:
    Update YourFile
         set YourField = 0
    Where YourField is NULL;
    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

  5. #5
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hallo,

    das Feld ist nachträglich hinzugefügt worden.
    Aber sicher ein schreibendes Programm nicht kompeliert worden.

    Was ist eigentlich ein echter Null-Wert?
    Der oben beschriebene Fall?

    Wie schaut ihr die Hex-Werte an? Mit DSPPFM?

    lg

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    select hex(feld1), hex(feld2) from ...
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke an alle,

    ich habe es nun so upgedatet:

    update myfile
    set oldKDN = 0
    where hex(oldKDN) = '404040'

    lg

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Warum soll ein Vergleich mit VARCHAR(NumWert) besser sein?
    Damit verhindert man jedweden Indexzugriff, es sei denn man benutzt ebenso einen kalkulierten Index.
    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

Similar Threads

  1. NULL Felder / CPYTOIMPF
    By cicero22 in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 03-09-14, 18:45
  2. UPDDTA und Null-Werte
    By alexk2013 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-05-14, 12:33
  3. SQL IS nOT NULL funktioniert nicht auf V7.1
    By hs in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 31-01-14, 11:49
  4. Antworten: 5
    Letzter Beitrag: 23-04-03, 13:48
  5. Virtuelle Spalten im VIEW auf NULL
    By KB in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-05-01, 15:04

Berechtigungen

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