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

    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
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2021
    Beiträge
    11
    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
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2007
    Beiträge
    295
    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
    11
    Danke man lernt nie aus INTENSITIVE habe ich bis dato noch nie verwendet.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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 seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    May 2007
    Beiträge
    295
    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
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •