jaki sposób iteracyjne nad zestawu rekordów w RPG (LE) z osadzonym SQL?Jak mogę powtórzyć zestaw rekordów w języku RPG (LE) z wbudowanym SQL?
7
A
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.
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ń. –
Hi @Mike Wills, byłem zainteresowany, aby przeczytać więcej szczegółów na ten temat ale link do witryny jest zepsuty. – mike