[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2021
    Beiträge
    8

    DB2_NUMBER_ROWS Falsche Anzahl von Sätzen

    Hallo,

    ich habe folgenden Code:

    Code:
    exec sql prepare dynSqlStmt1 from :wkSqlStmt;                  
    exec sql open sqlCsrRead1;                                     
     exec sql                                                    
      get diagnostics :wkCount = DB2_NUMBER_ROWS;                
    exec sql declare sqlCsrRead1 cursor for dynSqlStmt1;
    Obwohl es nur ein Satz vorhanden ist, bekomme ich immer Werte zurück die ich mir nicht erklären kann (997, 1247, ..)

    Da ich den SFL-Dynamisch aufbaue und mit Pagedown die nächsten lese, weiß ich beim drucken nicht wie viele Sätze vorhanden sind.

    Laut Handbuch sollte das so funktionieren.

    Was ist an der Methode falsch?

    Dank im Voraus

    Liebe Grüße

    PS: habe auch versucht den Cursor vorher zu schließen

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    19.435
    Die Info ist vom Grundsatz her ein Schätzwert, da je nach Komplexität des Selects die genaue Anzahl erst beim vollständigen Lesen verfügbar ist.

    Du kannst allerdings beim Select einen zusätzlichen "count(*) over() as total" hinzufügen.
    Somit wird nun tatsächlich erst mal alles gelesen und du hast vom 1. bis letzten Satz die Gesamtzahl zur Verfügung.
    Dies ist allerdings mit einer kleinen Perfomranceeinbuße hinzunehmen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2021
    Beiträge
    8
    Danke für die Info, werde ich gleich ausprobieren.

    Das Statement ist gar nicht so komplex.
    Das es Probleme mit Joins geben würde, war mir bewusst aber dachte wenn ich nur eine Tabelle abfrage...

    Code:
    SELECT ARLAG, ARTNR, ARTBZ, ARTBZ2, AREXTNR, ARDPR, ARLBS FROM   
    MATARTP WHERE Length(rtrim(ARTNR)) >= 8 AND ARTNR NOT IN(        
    'FREMD-REP ') AND ARTNR NOT LIKE ('K-%') AND UPPER(ARLAG) =      
    UPPER('0  ') AND ARLBS = 0 ORDER BY ARTNR

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    19.435
    Da können fast keine Indizes verwendet werden, kein Wunder dass es eine Schätzung gibt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2007
    Beiträge
    282
    Ich hatte das Selbe Problem. Nach einer Suche im Internet wurde mir vorgeschlagen den Cursor als INTENSITIVE zu deklarieren, es klappt nun mit den "DB2_NUMBER_ROWS" ... inwiefern sich diese Änderung jedoch positiv oder negativ auf dein Programm auswirken könnte müsstest probieren.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  6. #6
    Registriert seit
    Aug 2021
    Beiträge
    8
    Danke man lernt nie aus INTENSITIVE habe ich bis dato noch nie verwendet.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.765
    Sollte wohl INSENSITIVE heißen?!

    Hier aus der Reference was INSENSITIVE bedeutet ...
    INSENSITIVE
    Specifies that once the cursor is opened, it does not have sensitivity to inserts, updates, or
    deletes performed by this or any other activation group. If INSENSITIVE is specified, the cursor is
    read-only and a temporary result is created when the cursor is opened. In addition, the SELECT
    statement cannot contain a UPDATE clause and the application must allow a copy of the data
    (ALWCPYDTA(*OPTIMIZE) or ALWCPYDTA(*YES)).
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion 2021
    Virtuelle SQL und RPG Schulungen

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    19.435
    ALWCPYDTA ist eine Compiler-Anweisung des CRTSQL.... und steht per Default auf *Optimize.
    Da finde ich persönlich inzwischen "Count(*) Over()" schöner und fast ohne Performancenachteile.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    May 2007
    Beiträge
    282
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Sollte wohl INSENSITIVE heißen?!

    Hier aus der Reference was INSENSITIVE bedeutet ...
    INSENSITIVE
    Specifies that once the cursor is opened, it does not have sensitivity to inserts, updates, or
    deletes performed by this or any other activation group. If INSENSITIVE is specified, the cursor is
    read-only and a temporary result is created when the cursor is opened. In addition, the SELECT
    statement cannot contain a UPDATE clause and the application must allow a copy of the data
    (ALWCPYDTA(*OPTIMIZE) or ALWCPYDTA(*YES)).
    :-) Natürlich. Muss mir wohl einen Korrekturleser besorgen. Danke für die Richtigstellung.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    19.435
    Da brauchst du nichts bestellen, die sind doch schon da;-), und das ganz freiwillig.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. RPGLE SQL - Anzahl der Zeilen auslesen
    Von Radinator im Forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-02-19, 16:36
  2. CPYF mit unterschiedlicher Anzahl Felder
    Von SabineK im Forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 24-11-14, 20:18
  3. Omnifind, Anzahl der Indexspalten
    Von dschroeder im Forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 20-10-14, 15:16
  4. SQL mit Vergleich ANzahl Sätzen pro Kunde
    Von malzusrex im Forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 06-06-14, 13:44
  5. Beschränkung auf Anzahl Felder in Tabelle????
    Von KB im Forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-09-01, 11:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •