-
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
-
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
-
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.
Similar Threads
-
By Squall in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 18-10-06, 12:01
-
By Jamikl in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 30-06-06, 09:48
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-06-06, 09:43
-
By e_sichert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 03-05-06, 10:47
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks