[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2004
    Beiträge
    44

    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

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    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 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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jun 2004
    Beiträge
    69
    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 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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    @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).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Apr 2004
    Beiträge
    31
    Zitat 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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Jun 2004
    Beiträge
    17

    Unhappy

    Zitat 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?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    @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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. sql Anzahl Datensätze in Zweit-Datei
    By rr2001 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 13-12-06, 14:04
  2. Anzahl gelöschter Datensätze in PF
    By Der_Unwissende in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-10-06, 08:32
  3. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  4. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  5. Satzanzahl Select (embedded SQL)
    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
  •