-
SQL-Select Anzahl der Datensätze
Hallo,
zunächst noch mal vielen Dank für die schnellen Antworten beim letzten Mal.
Jetzt zu meinem Problem: in einem Anzeigeprogramm lese ich per DECLARE CURSOR ... FOR SELECT... WHERE... ORDER BY Datensätze aus einer zeimlich großen Datei ein, die ich dann in einer Schleife per FETCH NEXT CFROM CURSOR INTO... weiter verarbeite. Nun müßte ich allerdings vor Beginn der Schleife wissen, wieviele Datensätze die SELECT-Anweisung denn tatsächlich ausgewählt hat. Meines Wissens geht das nur mit einer zuvor ausgeführten zusätzlichen SELECT COUNT(*)-Anweisung, was aber vermutlich auf die Performance des Programms drückt. Gibt es eine Möglichkeit, dies direkt in dem eigentlichen SELECT-Statement einzubauen, oder vielleicht eine andere elegante Lösung?
Vielen Dank im Voraus!
Jörg
-
Hallo,
Ich wundere mich immer wieder für was sich die Leute so interessieren; bei Rekord Löffel Exzess kriegt man das garnicht raus und das stört auch niemand, aber seis drum:
select count(*) ist normalerweise der Weg, den man gehen muss. Wenn dafür ein Index verwendet werden kann, sollte das auch fluppen. Aufpassen sollte man, dass man dabei nicht mit hohem Sperrlevel liest.
mfg
Dieter Bender
Zitat von JoergHamacher
Hallo,
zunächst noch mal vielen Dank für die schnellen Antworten beim letzten Mal.
Jetzt zu meinem Problem: in einem Anzeigeprogramm lese ich per DECLARE CURSOR ... FOR SELECT... WHERE... ORDER BY Datensätze aus einer zeimlich großen Datei ein, die ich dann in einer Schleife per FETCH NEXT CFROM CURSOR INTO... weiter verarbeite. Nun müßte ich allerdings vor Beginn der Schleife wissen, wieviele Datensätze die SELECT-Anweisung denn tatsächlich ausgewählt hat. Meines Wissens geht das nur mit einer zuvor ausgeführten zusätzlichen SELECT COUNT(*)-Anweisung, was aber vermutlich auf die Performance des Programms drückt. Gibt es eine Möglichkeit, dies direkt in dem eigentlichen SELECT-Statement einzubauen, oder vielleicht eine andere elegante Lösung?
Vielen Dank im Voraus!
Jörg
-
Ab V5 geht auch folgendes Konstrukt:
with
Tempfile as (select ...from ... where ...)
select tempfile.*, (select count(*) from tempfile) as counter from tempfile
man erhält damit ein zusätzliches Feld mit der Anzahl Sätze pro Fetch
-
Hallo Jörg,
bei embedded-sql wird automatisch eine Datenstruktur mit Namen "SQLCA" erstellt.
Dort gibt es das Feld SQLERRD(3), in dem die Anzahl an "gefetchten" Sätzen steht.
Schau mal ins Redbook: "DB2 Universal Database for iSeries SQL Reference"
Gruß
Alexander.
Zitat von JoergHamacher
Hallo,
zunächst noch mal vielen Dank für die schnellen Antworten beim letzten Mal.
Jetzt zu meinem Problem: in einem Anzeigeprogramm lese ich per DECLARE CURSOR ... FOR SELECT... WHERE... ORDER BY Datensätze aus einer zeimlich großen Datei ein, die ich dann in einer Schleife per FETCH NEXT CFROM CURSOR INTO... weiter verarbeite. Nun müßte ich allerdings vor Beginn der Schleife wissen, wieviele Datensätze die SELECT-Anweisung denn tatsächlich ausgewählt hat. Meines Wissens geht das nur mit einer zuvor ausgeführten zusätzlichen SELECT COUNT(*)-Anweisung, was aber vermutlich auf die Performance des Programms drückt. Gibt es eine Möglichkeit, dies direkt in dem eigentlichen SELECT-Statement einzubauen, oder vielleicht eine andere elegante Lösung?
Vielen Dank im Voraus!
Jörg
-
@Alexander
Genau das ist doch das Problem: Die Anzahl Sätze des FETCH und nicht des SELECT !
Wenn ich also genau 1 Fetch mache und ein Satz wurde gelesen, steht der Wert auf 1.
Mache ich einen Fetch z.B. in eine Struktur mit 100 Vorkommen, kann ich darüber feststellen wieviel Sätze tatsächlich gelesen wurden (0-100).
Und beim Insert/Update/Delete steht dort auch die Anzahl betroffener Sätze.
Für die Anzahl des SELECT bleibt auch nur COUNT, wobei das Ergebnis durchaus nur temporär ist und während des Lesens geändert sein könnte (Insert/Delete anderer Job's).
-
Zitat von Fuerchau
Ab V5 geht auch folgendes Konstrukt:
with
Tempfile as (select ...from ... where ...)
select tempfile.*, (select count(*) from tempfile) as counter from tempfile
man erhält damit ein zusätzliches Feld mit der Anzahl Sätze pro Fetch
Hallo,
habe mit Interesse o. g. SQL-Syntax gelesen und auch schon ausprobiert.
Wo bitte kann ich die Syntax (evtl. auch für weitere Möglichkeiten) nachschlagen. Habe schon die PDF-Handbücher befragt, aber leider nichts gefunden.
Vielen Dank schon mal im voraus.
Schorsch
-
-
Zitat von BenderD
Hallo,
Ich wundere mich immer wieder für was sich die Leute so interessieren; bei Rekord Löffel Exzess kriegt man das garnicht raus ....
mfg
Dieter Bender
@BenderD
Schon mal was von der Dateiinformations-DS gehört? Da stehen die Anzahl Datensätze einfach so drin.
Muss man den Stil von BenderD pflegen um "Professional User" zu werden?
-
@Bogomil
Es ging um SQL und nicht normale Dateibearbeitung. Dort gibts keine INFDS !
Und wie willst du per INFDS die Anzahl zu verarbeitender Sätze herausbekommen, wenn per Bedingung (where beim Select) nur ein paar der Sätze verarbeitet werden müssen ?
Und was den Stil angeht: Prof.User wird man, wenn man das Thema nicht verfehlt.
Similar Threads
-
By rr2001 in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 13-12-06, 14:04
-
By Der_Unwissende in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 20-10-06, 08:32
-
By rr2001 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 07-07-06, 09:56
-
By klausgkv in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 08-06-06, 13:47
-
By Schorsch in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-09-05, 15:22
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