2008-09-23 8 views

cevap

12

Genellikle bir imleç oluşturacağım ve her kaydı getireceğim.

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

Bu cevap in a post on my website daha fazla ayrıntı ekledik.

+0

Merhaba @ Mike Wills, bu konuda daha fazla ayrıntı okumak baktılar ama web bağlantısı bozuldu. – mike

7

Mike'ın dediği gibi, bir imleç üzerinde yineleme en iyi çözümdür. Biraz daha iyi performans vermek için eklerim, bir seferde bir kayıt yerine blok halinde işlemek için bir diziye almak isteyebilirsiniz.

Örnek:

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

+0

Bunu beğendim ... Daha önce yapmadım. Büyük kayıt kümelerinde denemek zorundayım. –

İlgili konular