如何使用嵌入式SQL迭代RPG(LE)中的一组记录?
答案 0 :(得分:13)
通常我会创建一个游标并获取每条记录。
//***********************************************************************
// 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
我在此答案中添加了更多详细信息in a post on my website。
答案 1 :(得分:7)
正如迈克所说,迭代光标是最好的解决方案。我会添加以提供稍微好一点的性能,您可能希望获取一个数组来处理块而不是一次处理一个记录。
示例:
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