[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nö.
    Wie willst du denn die Daten anders als per Fetch von SQL holen ?
    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

  2. #2
    Registriert seit
    Apr 2003
    Beiträge
    195
    @Fuerchau,

    ich habe mich villeicht falsch ausgedrückt; ich meinte es in etwa so:

    Code:
     *-------------------------------------------------
     ***** für SQL Statement                           
     *-------------------------------------------------
    D SIDX1           S              5  0 Inz(1)       
    D SIDX2           S              5  0 Inz(1)       
    D                                                  
    DS00S01L          DS                  OCCURS(5000) 
    D   L1TXNR                       6A                
    D   L1TXB1                      30A                
     *
    DS1PTR            S               *   INZ(%ADDR(S00S01L))   
    D                 DS                  BASED (S1PTR)         
    DS00S02L                       235A   DIM(5000) DESCEND     
    D   L2TXNR                       6A   OVERLAY(S00S02L:1)    
    D   L2TXB1                      30A   OVERLAY(S00S02L:*NEXT)
    *
     * ANZAHL DER FELDER ( DIM(XX) ) MUSS MIT ANZAHL IN SELECT ÜBEREINSTIMMEN !! 
    DIND_ARRAY        DS                  OCCURS(5000)                           
    D INDS                           4B 0 DIM(12)
    und dann in den C-Bestimmungen

    Code:
    /free
          #SQLSTM =                                                            
        'Select TXTXNR, TXTXB1, TXTXB2, TXTXB3, TXTXB4, TXTXB5, TXTXB6, ' + 
        'TXTXB7, TXSTK1, TXSTK2, TXSTK3, TXKDF1 from TABD ' +               
        'WHERE TXSART = ''TX'' and TXFIRM = ''1'' and TXWKNR = ''000'' ' +  
        'and TXTXRT = ''PE'' ';                                             
    /end-free
    
     *                           
     * Statement vorbereiten     
     *                           
    C/EXEC SQL                   
    C+ PREPARE S1 FROM: #SQLSTM  
    C/END-EXEC                   
     *                           
     * Cursor defnieren          
     *                           
    C/EXEC SQL                   
    C+ DECLARE C1 CURSOR FOR S1                              
    C/END-EXEC                                               
     *                                                       
     * Cursor schliessen                                     
     *                                                       
    C/EXEC SQL                                               
    C+ CLOSE C1                                              
    C/END-EXEC                                               
     *                                                       
     * Cursor öffnen                                         
     *                                                       
    C/EXEC SQL                                               
    C+ OPEN C1                                               
    C/END-EXEC                                               
     *                                                       
     * alle Zeilen laden                                     
     *                                                       
    C                   Eval      SIDX2 = 5000               
    C/EXEC SQL                                               
    C+ FETCH FROM C1 FOR :SIDX2 ROWS INTO :S00S01L:IND_ARRAY 
    C/END-EXEC                                   
     *                                           
    C                   Eval      I# = SQLERRD(3)
     *                                           
     * Cursor schliessen                         
     *                                           
    C/EXEC SQL                                   
    C+ CLOSE C1                                  
    C/END-EXEC                                   
    
    C                   Eval      SIDX1 = 1                
    C                   Eval      %OCCUR(S00S01L) = SIDX1  
    C                   DOW       SIDX1 <= I#              
     * Verarbeitung
    C                   Move      L1TXNR        S0PERS#    
    C                   Movel     L1TXB1        S0NAME     
     *
    C                   EVAL      SIDX1 = SIDX1 + 1          
    C                   EVAL      %OCCUR(S00S01L) = SIDX1    
    C                   EndDo

  3. #3
    Registriert seit
    Apr 2003
    Beiträge
    195
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nö.
    Wie willst du denn die Daten anders als per Fetch von SQL holen ?
    FETCH kann nicht ersetzt werden, ist mir klar, aber wenn fetch nur einmal alle Datensätze rüberschiebt... das war gemeint.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ob du nun die Daten erst in ein Array lädst oder direkt verarbeitest, von der Performance wirst du da keinen Unterschied bemerken.
    Einfacher ist natürlich die Direktverarbeitung, vor allem wenn ich nicht weiß, wie viele Sätze ich denn so bekommen kann.

    Ansonsten ist ein
    for SIDX1 = 1 to I#;
    endfor;
    einfacher .
    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
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von FNeurieser Beitrag anzeigen
    FETCH kann nicht ersetzt werden, ist mir klar, aber wenn fetch nur einmal alle Datensätze rüberschiebt... das war gemeint.
    Aber auch beim Multiple Row Fetch ist ein Pointer-Handling nicht erforderlich, sofern das SQL-Statement (bzw. die im SELECT angegebenen Spalten) zur Compile-Zeit bekannt sind.
    Das Ergebnis wird direkt in eine Mehrfach-Datenstruktur (Schlüssel-Wort OCCURS) oder Array-Datenstruktur (Schlüssel-Wort DIM) eingelesen.
    Die Anzahl der eingelesenen Datensätze wird dann aus der Mehrfach/Array-Datenstruktur ausgelesen. Sofern mehr Datensätze als die Mehrfach/Array-Datenstruktur halten kann eingelesen werden müssen, erfolgt ein weiterer Fetch.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Apr 2003
    Beiträge
    195
    @All

    Danke an alle. Jetzt ist mir wieder einmal etwas viel klarer geworden.

Similar Threads

  1. setll und %found
    By ssylten in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 10-10-06, 11:02
  2. Abbruch bei SETLL
    By haertl in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 11-01-06, 14:00
  3. Zugriff auf Serielle Schnittstelle aus RPG/VARPG
    By Kampi4 in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 25-11-05, 07:37
  4. Erstellen Trigger über SQL / Read Funktion
    By GHoffmann in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 07-07-05, 09:18
  5. VA RPG Read anweisung schlägt fehl
    By Peter Kosel in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 18-10-01, 12:49

Berechtigungen

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