-
Die Parameter sind in diesem Fall die Werte 145210 sowie 145221, 145224 , 145222, 145223, 60100, 60110, 60150, 60180, 61000. Sie werden durch einen Datensatz
aus einer Datei eingelesen. Jeder Wert steht in einer eigenen Variable. Die Hostvariablen
##WRK, :##JR und :##MM werden durch eine Eingabemaske beim Start des
Programms vom User eingegeben. Danach werden die Informationen in eine
Variable zum SQL-Kommando zusammengebaut.
-
Hallo,
SELECT SUM(VB)
INTO :H#SUM
FROM LOHKOSP
WHERE VABHI = 4 AND
VWERK = ? AND
VABJJ = ?
AND VABMM BETWEEN 01 AND ? AND
VEURO = 1 AND ( VBKST = ? OR
VBKST = ? OR
VBKST = ? OR
VBKST = ? OR
VBKST = ?)
AND (VKONT = ? OR
VKONT = ? OR
VKONT = ? OR
VKONT = ? OR
VKONT = ?)
lässt sich im Programm preparen und dann mit Execute using variabel ausführen.
(Tippfehler vorbehalten)
mfg
Dieter Bender
 Zitat von haertl
Die Parameter sind in diesem Fall die Werte 145210 sowie 145221, 145224 , 145222, 145223, 60100, 60110, 60150, 60180, 61000. Sie werden durch einen Datensatz
aus einer Datei eingelesen. Jeder Wert steht in einer eigenen Variable. Die Hostvariablen
##WRK, :##JR und :##MM werden durch eine Eingabemaske beim Start des
Programms vom User eingegeben. Danach werden die Informationen in eine
Variable zum SQL-Kommando zusammengebaut.
-
Hallo Herr Bender,
im Handbuch steht:
Syntax: EXECUTE statementname USING hostvariable
Mit dem Hinweis: The prepared statement cannot be a select statement. ???!!!
Dazu gehört doch auch der select sum.
Außerdem fällt mir ein, daß die Anzahl der Parameter je Aufruf unterschiedlich
sein können. Hier muß ich dann mit SQLDA arbeiten oder ?
Hätten Sie vielleicht ein kleines Beispiel ?
Danke für Ihre Antwort
M.f.G. Härtl
-
Hallo nochmal,
statt SELECT geht prepare eines Cursors und dann OPEN using, mit nachfolgendem FETCH. Damit könnte man wohl sogar die ursprüngliche Geschichte heilen.
Das Problem mit der Anzahl der verwendeten Parameter lässt sich auf mehrere Arten heilen, wobei man hier auch aufpassen müsste, wie gut das ausgeführt wird. Der WHERE IN ist ein ausgesprochener Penner. In Ihrem Fall könnte man z.B. WHERE Klauseln blind zufügen (doppeln), beim koppeln mit AND kann man and xyz < Highval oder > loval zufügen.
Beispiel habe ich sicherlich, nur im Moment keine Zeit zum Suchen (deshalb auch Vertipper und die Ungenauigkeit der vorherigen Antwort.)
SQLDA vermeide ich, weil ich das für schlecht lesbar und daher Fehler trächtig bei Änderung halte.
mfg
Dieter Bender
 Zitat von haertl
Hallo Herr Bender,
im Handbuch steht:
Syntax: EXECUTE statementname USING hostvariable
Mit dem Hinweis: The prepared statement cannot be a select statement. ???!!!
Dazu gehört doch auch der select sum.
Außerdem fällt mir ein, daß die Anzahl der Parameter je Aufruf unterschiedlich
sein können. Hier muß ich dann mit SQLDA arbeiten oder ?
Hätten Sie vielleicht ein kleines Beispiel ?
Danke für Ihre Antwort
M.f.G. Härtl
-
 Zitat von haertl
Die Parameter sind in diesem Fall die Werte 145210 sowie 145221, 145224 , 145222, 145223, 60100, 60110, 60150, 60180, 61000. Sie werden durch einen Datensatz
aus einer Datei eingelesen. Jeder Wert steht in einer eigenen Variable. Die Hostvariablen
##WRK, :##JR und :##MM werden durch eine Eingabemaske beim Start des
Programms vom User eingegeben. Danach werden die Informationen in eine
Variable zum SQL-Kommando zusammengebaut.
Hallo,
vielleicht habe ich ja Dein Problem nicht verstanden, aber:
Wenn Du die Parameter sowieso schon in einer Datei hast, warum verwendest du nicht bei Deinem IN einen Subselect?
Select .... from .... where ABC in (Select MyFld from MyFile where Key = 'X')
Voraussetzung ist, dass pro Auswahl-Möglichkeit ein Satz in der Datei vorhanden ist.
Wenn der String aufbereitet ist benötigst Du folgende Schritte:
1. Über ein Prepare-Statement wird der String in ein SQL-Statement konvertiert
2. Über ein Declare-Statement wird ein Cursor definiert.
3. Mit Open wird der Cursor geöffnet
4. Mit Fetch wird der erste (in deinem Fall einzige Satz) eingelesen.
5. Mit Close wird der Cursor wieder geschlossen.
Und das klappt sicher! bei einem Select Statement. Select ... into geht natürlich nicht!
Die Descriptor Area (SQLDA) brauchst Du nur, wenn im Select unterschiedliche Felder benötigt werden. Soweit ich das beurteilen kann ist das bei Dir nicht der Fall, da jedes Mal der Maximal-Wert ermittelt werden soll.
Birgitta
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 11:58
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 26-10-06, 11:07
-
By ChrisX in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-10-06, 16:31
-
By Flappes in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 06-10-06, 09:39
-
By KL_RPG in forum NEWSboard Drucker
Antworten: 5
Letzter Beitrag: 12-05-06, 16:07
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