[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Unterschiedliche Summen im Sql

    Hallo liebes Forum,

    ich habe im Programm ein Sql-Statement
    Code:
    EXEC SQL                                      
     SELECT SUM(B1MIN)                           
     INTO :SUMME :MyIndikator                     
     FROM ZA1, ZB1                        
     WHERE                                        
     A1AUF = :A2AUF AND A1AUF = B1AUF AND     
     A1PNR = :B1PNR AND A1PNR = B1PNR AND     
     A1KZ1 = :A1KZ1 AND                         
     A1FNR = :B1FNE AND                         
     A1GNR = :A1GNR AND                         
     A1TNR = :A1TNR AND                         
     A1ZNR = :A1ZNR;
    Wenn ich aber dies in der Interaktive SQL-Sitzung aufrufe,
    bekomme ich eine andere Summe geliefert.

    Mit dem Debugger habe ich kontrolliert ob die richtigen Werte übergeben werden.

    Es wird mir im Dspjoblog auch kein Fehler angezeigt und der Sqlcod ist auch null.

    Kann mir da bitte jemand einen Tip geben?

    Dank im Voraus

    Tarki

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ich würde da glatt behaupten, dass dies nicht sein kann, der Fehler sitzt vor dem Bildschirm .

    Wie sicher bist du, dass du den Inhalt der Hostvariablen korrekt in STRSQL übernommen hast?
    Ein kleiner Tippfehler rächt sich da schon.

    Stimmt die LIBL für beide Abfragen überein?
    Und, eher der unwahrscheinliche Fall, stimmen Commt-Definitionen überein?
    D.h.: Wenn du Commit=*CHG im Programm hast, werden ggf. nicht committete Daten anderer Jobs überlesen, STRSQL arbeitet per Default mit Commit=*none.
    Ach ja, könnten die Daten zwischenzeitlich geändert sein?
    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
    Apr 2012
    Beiträge
    360
    Hallo,

    habe wirklich zig mal geprüft.

    Bin mir ja eh sicher das das Problem wieder vor dem Bildschirm sitzt, aber Selbsterkenntnis ist der 1 Schritt zur Besserung oder?

    In den H-Bestimmungen habe ich definiert
    Code:
    H BndDir('BNDDIR')                       
    H DEBUG(*YES)                            
    H DftActGrp(*NO)                         
    HOption(*srcstmt : *nodebugio)
    weiters
    Code:
    EXEC SQL Set Option Commit = *None, DatFmt = *ISO;
    Die Hostvariablen habe ich im Debugger geprüft aber anscheinend prüft er immer nur die 1. laufende Nummer(A1FNR).
    Bekomme immer das selbe Ergebnis.

    lg

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ändere mal den SQL auf die korrekte Form um:

    select ...
    from ZA1
    inner join ZA2 on ...
    where ...

    Die "alte" Form "F1, F2, ..." wird nur noch toleriert.

    Der Grund ist die "Sonderbehandlung" bei STRSQL, die vielfach anders optimiert um möglichst schnell Daten anzuzeigen.
    Wie man dem das abgewöhnen kann, habe ich auch noch nicht gefunden.
    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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ...
    - inner join oder cross join darf keine Rolle spielen, das wäre ein Bug und kein Feature.
    - Optimierung (kann man mit optimize clause beeinflussen)darf keine Rolle, das wäre ein bug und kein feature
    - Unterschiede auf Grund der Verwendung anderer Datentypen (interaktives SQL versus Select into) könne auftreten und sind ein feature und kein Bug.

    D*B
    PS: ob die Probleme vor dem Bildschirm dann Bug oder Feature sind, da kenne ich beide Varianten (nicht abhängig vom Bildschirm)
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Die Frage ist ggf. noch, ob der Indicator ggf. gesetzt ist.

    Ansonsten:
    Ich bin der festen Überzeugung, dass vor meinem Bildschirm ein Feature sitzt .
    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
    Apr 2012
    Beiträge
    360
    Der ist definiert.
    Code:
    DPGMSDS          sds                     
    D SDSPGM                        10a      
    D SDsts                          5s 0    
    D SDprvsts                       5s 0    
    D SDsrcstmt                      8a      
    D SDroutine                      8a      
    D SDparms                        3s 0    
    D SDmsgid                        7a      
    D SDmi#                          4a      
    D SDwork                        30a      
    D SDlib                         10a      
    D SDerrdta                      80a      
    D SDrpgmsg                       4a      
    D SDFiller01                    69a      
    D SDJOB                         10a      
    D SDSUSR                        10a      
    D SDjobnum                       5s 0    
    D SDjobdate                      6s 0    
    D SDrundate                      6s 0    
    D SDruntime                      6s 0    
    D MyIndikator                    5I 0    
    D  MsgText               91    170       
    D  MsgTextKurz           91    140
    MYINDIKATOR = 0
    SQLCOD = 000000000.
    SQLSTT = '00000'

    Werde nun die korrekt Form ausprobieren.

    Gruß

    Tarki

  8. #8
    Registriert seit
    Apr 2012
    Beiträge
    360
    Habe diese Form probiert aber liefert das gleich falsche Ergebnis wie das andere Statemnt.

    Code:
    EXEC SQL                                      
     SELECT SUM(B1MIN)                           
     INTO :SUMME :MyIndikator                     
     FROM ZA1 INNER JOIN ZB1                        
     ON                                        
     A1AUF = :A2AUF AND A1AUF = B1AUF AND     
     A1PNR = :B1PNR AND A1PNR = B1PNR AND     
     A1KZ1 = :A1KZ1 AND                         
     A1FNR = :B1FNE AND                         
     A1GNR = :A1GNR AND                         
     A1TNR = :A1TNR AND                         
     A1ZNR = :A1ZNR;

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Starte einfach mal ein DB-Monitoring und schau dir den Zugriffsplan im Detail an.
    Dort solltest du erkennen können ob irgendwo irgendwelche CASTs oder ähnliches gemacht wird, was dein Ergebnis verfälschen könnte.

    Wenn du die Statements im Visual Explain nebeneinander Vergleichst bekommst du sicher einen Hinweis.

    lg Andreas

  10. #10
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo,

    1. um andere Bibbliotheken auszuschliessen
    (zum Test die Dateien qualifiziert lesen )

    2. wie Baldur geschirieben hat
    select felder
    join mit Schlüsselfelder
    where die variablen

    3. MyIndicator
    ist der in der SDS wirklich richtig positioniert ?

    Gruß
    Michael

Similar Threads

  1. Sql Summen bilden 2.Teil
    By tarkusch in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 18-12-12, 15:18
  2. Sql Summen bilden
    By tarkusch in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 03-12-12, 15:24
  3. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  4. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  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
  •