문제

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가 말했듯이 커서를 반복하는 것이 가장 좋은 솔루션입니다. 나는 약간 더 나은 성능을 제공하기 위해 추가 할 것입니다. 한 번에 하나의 레코드가 아닌 블록으로 처리하기 위해 배열로 가져 오는 것을 원할 수도 있습니다.

예시:

  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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top