[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    69

    Question embedded-SQL: Problem mit variablem SQL

    Hallo Forum,

    ich bekomme ein Probelm mittels embedded-SQL nicht so in den Griff, wie ich es mir vorstelle. Vielleicht hat jemand von Euch die zündende Idee.
    Ich habe eine Datei, in der täglich die Umsätze von allen unseren Geschäftsbereichen und allen Abteilungen fortgeschrieben werden.

    Ich möchte ein Serviceprogramm erstellen das anhand der übergebenen Parameter die Umsätze kumuliert und ausgibt.
    Folgende Struktur wird als Übergabestruktur verwendet:

    d SummDs ds
    d SummFeld 6
    d Datum d datfmt(*iso)
    d GBereich 2 0
    d Abteilung 2 0
    d JahrMonTag 3


    Der Inhalt des Feldes 'SummFeld' soll kumuliert werden. Sind GBereich und Abteilung gleich 0, soll der Umsatz der gesamten Firma ermittelt werden. Ist GBereich gefüllt und Abteilung = 0 soll nur der Umsatz dieses Geschäftsbereichs ermittelt werden.
    Im Parameter JahrMonTag wird vorgegeben, ob nur für den Monat, nur für den Tag oder der Gesamtumsatz des Jahres bis zum übergebenen Monat ermittelt werden soll.

    Momentan sieht mein SQL-Statement so aus:
    c/EXEC SQL
    c+ SELECT Sum(SUT010) into :M_Summe from SUT
    c+ WHERE sut005 = :Abteilung and sut016 = :Jahr and
    c+ sut008 <= :Monat - 1 or (sut005 = :Abteilung and
    c+ sut016 = :Jahr and sut008 = :Monat and
    c+ sut009 <= :Tag)
    c/END-EXEC
    Das hat aber den Nachteil, dass ich 18 verschiedene Statements codieren müsste. Kann ich im SQL-Statement nicht Variablen verwenden, die ich vorher fülle?

    Ungefähr so:
    c/EXEC SQL
    c+ SELECT Sum(:SummFeld) into :M_Summe from SUT
    c+ WHERE G_SqlStatement
    c/END-EXEC
    /free
    Und im Feld G_SqlStatement steht dann die where-Bedingung

    Vielen Dank.

    Gruß
    Alexander

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

    wenn ich das richtig sehe muss Du dein SQL in ein Array packen und das in einem Loop ausführen lassen.
    Ungefähr so :

    DS oder Array mit dem SQL Select
    C/EXEC SQL
    C+ PREPARE SELECTION FROM :SELECT
    C/END-EXEC

    C/EXEC SQL
    C+ DECLARE xxx SCROLL CURSOR FOR SELECTION
    C/END-EXEC

    C/EXEC SQL
    C+ OPEN SUPPL
    C/END-EXEC

    danach den Fetch


    C/EXEC SQL
    C+ FETCH NEXT FROM xxx INTO
    c+
    C/END-EXEC

    so kannst Du in einem Loop arbeiten
    gruss Michael

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Auch hier gilt: Sinnvolle Gestaltung der Where-Bedingung !
    Da es auch möglich ist, eine Konstante zu vergleichen kann man gleich sämtliche Bedingungen vorgeben:

    ... where ... and (:myvar = 0 or mydbfld = :myvar) ... and (:myvar2 = ' ' or mydbfld2 = :myvar2) ...

    Hiermit kann ich eigentlich genau das erreichen:
    Ist die Variable = 0 ODER das Dateifeld = meiner Variablen.
    Die restlichen Bedingungen sind entsprechend zu kodieren.
    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. Embedded SQL in VARPG
    By Squall in forum NEWSboard Programmierung
    Antworten: 23
    Letzter Beitrag: 18-10-06, 12:01
  2. embedded SQL statisch oder dynamisch
    By Jamikl in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-06-06, 09:48
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 10:47
  5. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 18:38

Berechtigungen

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