2008-09-23 17 views

Odpowiedz

12

Zazwyczaj będę tworzyć kursora i pobrać każdy rekord.

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

Dodałem więcej szczegółów do tej odpowiedzi in a post on my website.

+0

Hi @Mike Wills, byłem zainteresowany, aby przeczytać więcej szczegółów na ten temat ale link do witryny jest zepsuty. – mike

7

Jak powiedział Mike, iteracji nad kursorem jest najlepszym rozwiązaniem. Dodałbym, aby dać nieco lepszą wydajność, możesz chcieć pobrać do tablicy, aby przetwarzać w blokach zamiast jednego rekordu na raz.

Przykład:

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

Podoba mi się ... Nie robiłem tego wcześniej. Będę musiał spróbować na dużych zestawach nagrań. –