PDA

View Full Version : Recordcout in OLE DB-IBMDA



Michfei
23-02-03, 15:22
Hallo

ich habe dynamisch erstelle Abfragen
die auch teilweise berechnete Spalten bzw.
Funktionen beinhalten.
Zu dieser Abfrage benötige ich zunächst
die Satzanzahl, bevor die Daten (>1 Mio.)
zum Excel-Client geladen werden.
OLE-DB gibt grundsätzlich Recordcount=0
Gibt es in der AS400-Umgebung eine schnelle Lösung?

Nur um Feldbeschreibungen für die Abfragen zu
bestimmen, war meine Lösung in der Where-
Bedingung 1<>1 zu definieren, eigentlich
brauchbar, aber die AS400 benötigt für
eine Select-Anweisung wie z.B.
Select * from Lib/File where 1<>1
genauso lange wie ohne false-Bedg.
Gibt es eine Anweisung od. Befehl,
das eine 0-Zeilen-Abfrage auch entspr.
schnell ausführen läßt?


für schnelle Hilfe wäre ich dankbar

Michael

Fuerchau
24-02-03, 10:23
Unabhängig von den tatsächlichen Spalten entscheidet ja die Where-Bedingung über die Anzahl Sätze, also müssen 2 Abfragen gemacht werden:

1. select count(*) from ... where ...
2. select f1, f2, ... from ... where ...

Wenn die Daten aber sowieso heruntergeladen werden müssen, gibt es noch die folgende Möglichkeit:

with
xTable (f1, f2, f3, ...) as
(select f1, f2, f3, ... from ... where ...)

select count(*), xTable.* from xTable

Durch die With-Bestimmung werden die Daten auf der AS/400 in einem temporären Bereich (QTEMP) geladen und vom nachfolgenden Select dann tatsächlich abgerufen.

Alternativ ab V5:

select count(*), x.* from (select ...) as x

Michfei
24-02-03, 11:24
Hallo Fuerchau,

vielen Dank für die schnelle Hilfe!

die Lösung, es in die Qtemp kopieren
zu lassen, könnte bei sehr vielen Sätzen
aber evtl. zu Geschwindigkeitsproblemen
führen.