-
das Datum hat nichts mit dem Cursor zu tun. Sind das denn immer andere Select-Statements die du da verarbeitest???
-
 Zitat von JonnyRico
das Datum hat nichts mit dem Cursor zu tun. Sind das denn immer andere Select-Statements die du da verarbeitest???
Nein! "select * from FILE where ALPHAFELD=?"
In den Schleifendurchläufen wird jeweils ein anderer Inhalt dieses Feldes abgefragt.
-
Dass der Cursor offen bleibt, hat intern was mit Optimierungen zu tun.
Du kannst deine SQL's beschleunigen wenn du statische SQL's verwendest:
declare Filecursor cursor for
select * from FILE where ALPHAFELD=:MYFIELD
MYFIELD wird einfach als RPG-Feld definiert.
Damit sparst du dir den Prepare.
-
Besten Dank.
Dann will ich euch mal nicht weiter aufhalten. Den Tipp mit dem statischen SQL und dem variablen Inhalt wird ich im nächsten Teil testen.
-
 Zitat von Fuerchau
Dass der Cursor offen bleibt, hat intern was mit Optimierungen zu tun.
Du kannst deine SQL's beschleunigen wenn du statische SQL's verwendest:
declare Filecursor cursor for
select * from FILE where ALPHAFELD=:MYFIELD
MYFIELD wird einfach als RPG-Feld definiert.
Damit sparst du dir den Prepare.
Deinen Vorschlag auf statisches SQL zurückzugreifen hab ich versucht:
declare Filecursor cursor for Filesection
open Filecursor
SQLCOD = -514 (kein prepaire durchgeführt) !?
Andere Frage noch:
In der SELECT-Anweisung wurden 2 Tabellen mit LEFT JOIN verbunden.
Jedes Dateifeld einzeln anzusprechen find ich bei großem Umfang nervig. Deshalt "*" und INTO in die externe DS, die ich mit der DDS beschrieben habe. Was aber wenn ich nun 2 Tabellen anspreche?
-
Hi Armin,
das was du da gemacht hast ist ja eher dynamisch als statisch.
Dynamisch:
PHP-Code:
SQLStat = 'Select Kunde From Kundenstamm Where Nummer = ' + VarKDNR
Prepare DynSQL From SQLStat
Declare MyCur for DynSQL
Open MyCur
Statisch:
PHP-Code:
Declare MyCur for
Select Kunde From Kundenstamm Where Nummer = :VarKDNR
Open MyCur
Gruß
Sascha
-
Danke Sascha,
nachdem ich noch CURSOR eingefügt habe, wandelt der Precompile um.
Declare MyCur CURSOR for DynSQL
Jetzt bekomm ich aber den SQLCOD -501. Cursor wurde nicht geöffnet!?
-
Andere Frage noch:
In der SELECT-Anweisung wurden 2 Tabellen mit LEFT JOIN verbunden.
Jedes Dateifeld einzeln anzusprechen find ich bei großem Umfang nervig. Deshalt "*" und INTO in die externe DS, die ich mit der DDS beschrieben habe. Was aber wenn ich nun 2 Tabellen anspreche?
Dann definierst Du halt für jede Datei eine Datenstruktur und gibst sie beide beim Fetch an. Für die zweite Datei solltest Du außerdem eine Datenstruktur mit Indikator-Variablen verwenden, um festzustellen, ob NULL-Werte übertragen wurden.
PHP-Code:
C/EXEC SQL Fetch CsrC1 into :DSFile1, :DSFile2 :DSIndFile2
C/END-EXEC
Auch wenn es dir "nervig" erscheint Felder auszuwählen, SELECT * ist Gift für die Performance. Werden nur einzelne Felder ausgewählt können in einem Block wesentlich mehr Informationen eingelesen werden.
Birgitta
-
Danke Hr. Hauser für die Info.
Hat auch soweit geklappt. Nur die 3. DS übersteigt mein Verständnis.
Wie muss diese def. werden? Sollte es in der 2. Tabelle keinen passenden Satz geben würde die 2. DS nicht mit Blanks bzw. Nullen init.?
-
Hi,
also das könnte vielleicht daran liegen das ich mir bei dem o.a. Statement die Hochkommas geschenkt habe. Du müsstest bei der Variable die abfegragt wird noch '''' (für ein Hochkomma) vor und hinter der Variable einfügen.
Zu der von Birgitta (übrigens Fr. Hauser) angesprochenen Sache. Dort handelt es sich um eine Anzeigervariable.
d AnzVar 5I 0
Du also machst:
Fetch CsrC1 into :DSFile1, :DSFile2 :AnzVar
so erhälst du in dem Feld AnzVar den Wert 0, wenn alles okay ist , -1 wenn die Abfrage NULL zurück gibt und -2 wenn dein Feld für den abgefragten Wert zu klein ist.
Gruß
Sascha
-
Also das funktioniert einfach nicht! Weiterhin SQLCOD -501
FILEselect = 'select * ' +
'from FILE1 left join FILE2 on ' +
'BBELE = STBELE and BPOSI = STPOSI and ' +
'STSTAT = 4 ' +
'where BTEIL<>''E'' and ' +
'BKENN = '':WsGeb'' and BLIEW <= '':WsWoche'' ' +
'order by BKUND, BLIEW' ;
declare FILEcursor CURSOR for FILEselect
open FILECursor
FETCH NEXT FROM AUFGEScursor INTO :FILE1ds, :FILE2ds
Zur Anzeigervariablen:
Entspricht -1 dem SQLCOD 100?
Der Wert -2 entsteht wenn die 2. DS zu wenig Felder hätte?
-
Nein, weil was du machst ist auch ein Mischmasch aus Dynamisch und Statisch.
Versuch es doch einfach mal mit:
PHP-Code:
declare FILEcursor CURSOR for
select * from FILE1 left join
FILE2 on BBELE = STBELE and BPOSI = STPOSI and STSTAT = 4
where BTEIL<>'E' and BKENN = :WsGeb and BLIEW <= :WsWoche
order by BKUND, BLIEW
open FILECursor
FETCH NEXT FROM AUFGEScursor INTO :FILE1ds, :FILE2ds
Similar Threads
-
By Rincewind in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 18-12-06, 13:58
-
By Squall in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 18-10-06, 12:01
-
By FNeurieser in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 11-10-06, 14:53
-
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
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