埋め込み SQL を使用して RPG(LE) で一連のレコードを反復処理するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/120422

質問

埋め込み SQL を使用して RPG(LE) で一連のレコードを反復処理するにはどうすればよいですか?

役に立ちましたか?

解決

通常はカーソルを作成して各レコードをフェッチします。

   //***********************************************************************
   // 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 

この回答にさらに詳細を追加しました 私のウェブサイトの投稿で.

他のヒント

Mike が言ったように、カーソルを反復処理することが最良の解決策です。パフォーマンスを少し向上させるために、一度に 1 レコードずつではなく、配列にフェッチしてブロック単位で処理することをお勧めします。

例:

  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、ジェームズR.パーキンス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top