[NEWSboard IBMi Forum]

Thema: SQL Fetch

  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    850

    SQL Fetch

    Hallo zusammen,

    In einem SQLRPGLE Programm soll eine mit SQL erstellte Tabelle nach dem erstellen mit fetch gelesen werden.

    Hier das erstellen der Tabelle:
    PHP-Code:
    EXEC SQL                          
      create table qtemp
    /spo1p   as ( 
                                      
      
    SELECT    xxxxxxx
      FROM xx
      Where xxxx
        
    with data      

    Anschließend erfolgt im Programm die Leseroutine
    PHP-Code:
    EXEC SQL                      
        
    Declare theSpo  Cursor for  
                      
        
    SELECT  acut#, adate      
        
    From    qtemp/spo1p   ;     
                                    
     
    EXEC SQL Close theSpo ;        
     
    EXEC SQL Open  theSpo    ;     

       
    DoU SqlCode <> *zeros ;      
    EXEC SQL                                                     
        Fetch next from theSpo  into 
    :wk_acut#  ,               
                                                 
    :wk_adate                ;      
        
    arecarec1;                                    
        if 
    SqlCode <>  100     ;                                 
                                                                 
          if   
    xxxxx
               callp  DeleteaSpo
    wk_acut#);                    
               
    anr anr 1;                                    
          EndIf ;                                                

        EndIf ;     
                             
       
    EndDo;                
                             
     
    EXEC SQL Close theSpo 

    Der Fetch liest nur 2 Datensätze, obwohl ein paar tausend Sätze in der Tabelle vorhanden sind .

    Die Felder arec und anr sind nur Zähler.



    Muss man nach dem create table with data
    vielleicht noch einen Close oder ähnliches machen ?

    Gruß
    Michael

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Bist du sicher, dass auch wirklich SQLCOD = 100 auftritt ?
    Vielleicht gabs ja einen anderen SQL-Code ab dem 3. Satz (Konvertierungsproblem, NULL-Anzeiger o.ä.).

    Man sollte den SQLCOD schon gezielter abfragen:

    exec sql fetch ...;
    if SQLCOD <> *zero;
    leave;
    endif;

    Schließlich bedeutet
    0 = Daten gelesen
    100 = EOF
    < 0 = Fehler beim Lesen
    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
    Jan 2001
    Beiträge
    850
    Hi,

    ich schäme mich ja soooooooooooo..............

    In einer der weiteren Prozeduren wurde ein delete
    abgesetzt und da kein Satz für den delete gefunden wurde
    kam der sqlcod 100 und beendete die schleife.

    Man sollte sich die Programm doch genauer ansehen. Ich war
    davon ausgegangen das die Nr unique ist.

    Vielen Dank für den Denkanstoß
    Gruß
    Michael

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Gerade deshalb mache ich das meist so:

    dow 1=1;
    exec sql fetch ...;
    if SQLCOD <> *zero;
    leave;
    endif;
    :
    enddo;

    Da passiert sowas dann gar nicht.
    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
    Jan 2001
    Beiträge
    850

    Thumbs up

    Hi ,

    cool

    schönen Gruß
    Michael

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Gerade deshalb mache ich das meist so:

    dow 1=1;
    exec sql fetch ...;
    if SQLCOD <> *zero;
    leave;
    endif;
    :
    enddo;

    Da passiert sowas dann gar nicht.
    Ich würde allerdings nicht auf <> 0 abfragen weil:
    1. Ein Fehler ausgegeben werden könnte
    2. Eine Warnung ausgegeben werden könnte, bei der der Datensatz ausgegeben wird und verarbeitet werden kann.

    Besser ist es auf = 100 und < *Zeros abzufragen:

    ...
    Code:
      If SQLCOD = 100;
         Leave;
      ElseIf SQLCOD < *Zeros;
        //Fehlerbehandlung
        Iter/Leave - whatever
      EndIf;
      //Verarbeitung
    Schöne Grüße von der Common Conference im sonnigen (wenn auch etwas kühlen) Kalifornien.

    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

Similar Threads

  1. Brauche Hilfe zu FETCH xxx USING DESCRIPTOR
    By AndreasH in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 08-05-15, 13:09
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. SQL? Wieso "Datenumsetzung bei Fetch erforderlich"
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 09-05-06, 12:25

Berechtigungen

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