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

    verschachteltes SQL

    Hallo Leut, ich glaub ich sitz einem Systemfehler auf?!

    Aus der Auftragsdatei soll die Bestellmenge aufaddiert werden für Artikel, die lt. Materialdatei ein bestimmtes Material beinhalten.

    select sum(menge) into :rpgmenge from AUFTRAG
    Where artikel in (select concat(Dessin, Farbe)
    from Material
    where MatNr = :rpgmatnr
    group by Dessin, Farbe))

    Im RPG rennt sich der Befehl tot ohne Fehlermeldung.
    Im interaktiven SQL bringt er eine falche Summe!

    Danke für eure Mühe!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    select sum(menge) into :rpgmenge from AUFTRAG
    Where artikel in (select concat(Dessin, Farbe)
    from Material
    where MatNr = :rpgmatnr
    group by concat(Dessin, Farbe) ))

    Der "Group by" muss die gleichen Felder enthalten, die auch in der Select-Klausel definiert sind.

    Schneller geht das ganze, wenn du einen Index über "concat(Dessin, Farbe)" erstellst, ansonsten wird hier ein Tablescan durchgeführt.

    Zusätzlich gibts doch sicherlich noch ein oder mehrere Mandentenfelder die sicherlich in der Where-Klausel aufgeführt sein sollten.

    PS:
    Besser wäre hier ein:

    select sum(menge) into :rpgmenge from AUFTRAG
    Where artikel in (select distinct concat(Dessin, Farbe)
    from Material
    where MatNr = :rpgmatnr )
    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
    C/EXEC SQL
    C+ select sum(BBEAB) into :Schussmeter from AUFGES_S5
    C+ Where BARTN in (select concat(SGDESS, SGFB)
    C+ from MASCHUS1
    C+ where SGGARN = :GAGNR
    C+ group by concat(SGDESS, SGFB))
    C* and BDATU - int(BDATU / 100) * 100 = 6
    C* and BARTN in ('5071760210', '5071770310')
    C/END-EXEC

    Was macht "DISTINCT"?
    Hier der Originalbefehl. Interaktiv läuft er tadellos - hatte zuvor das Jahr nicht abgefragt. Das Jahr wird aus einem Datum im Format ""ttmmjj" herausgeschnitten.

    Was ist der Unterschied zwischen interaktivem SQL und embedded SQL?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    DISTINCT heißt nur eindeutige Zeilen.

    Interaktives SQL optimiert für schnellere Anzeige der Daten. Beim Blättern wirds dann ggf. langsamer.

    Embedded SQL optimiert eher für Wiederverwendbarkeit des Cursors.

    Manchmal hilft ein "optimize for 1 record".

    Wenn du das Programm ausführst, starte vorher mal STRDBG.
    Im Joblog findest du dann diverse Meldungen, warum das so langsam ist.

    Dass diese Form von SQL nicht gerade optimal ist, erklärt sich eigentlich von selbst.

    "group by concat" führt häufig zu Tablescans, wenn nicht vorher eingeschränkt werden kann.
    Prüfe, ob über SGGARN ein Index vorhanden ist, lege ihn ggf. an.

    Berechnungen in der Where-Klausel verhindern ebenso die Benutzung eines Index. Ggf. muss man ein Zusatzfeld integrieren, dass das Datum dann eben in JJJJMMTT speichert, so dass man mittels Index und "between" abfragen kann.

    Es gibt sicherlich noch mehr Optimierungen.
    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. 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
  •