Frage

Wie kann ich iterieren über eine Reihe von Datensätzen in RPG (LE) mit eingebetteten SQL?

War es hilfreich?

Lösung

In der Regel werde ich einen Cursor erstellen und jeden Datensatz holen.

   //***********************************************************************
   // Main - Main Processing Routine
   begsr Main;

     exsr BldSqlStmt;

     if OpenSqlCursor() = SQL_SUCCESS;

       dow FetchNextRow() = SQL_SUCCESS;
         exsr ProcessRow;
       enddo;

       if sqlStt = SQL_NO_MORE_ROWS;
         CloseSqlCursor();
       endif;

     endif;

     CloseSqlCursor();

   endsr;    // Main 

Ich habe mehr Details zu dieser Antwort hinzugefügt in einem Beitrag auf meiner Website .

Andere Tipps

Wie Mike sagte, über einen Cursor Iterieren ist die beste Lösung. Ich möchte hinzufügen, etwas bessere Leistung zu geben, könnte man vielleicht in ein Array holen wollen in Blöcke zu verarbeiten, anstatt einen Datensatz zu einem Zeitpunkt.

Beispiel:

  EXEC SQL                                                          
  OPEN order_history;                                             

  // Set the length                                                 
  len = %elem(results);                                             

  // Loop through all the results                                   
  dow (SqlState = Sql_Success);                                     
    EXEC SQL                                                        
      FETCH FROM order_history FOR :len ROWS INTO :results;         
    if (SQLER3 <> *zeros);                                                 
      for i = 1 to SQLER3 by 1;        
        // Load the output             
        eval-corr output = results(i); 
        // Do something 
      endfor;                          
    endif;                             
  enddo;                               

HTH, James R. Perkins

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top