如何使用嵌入式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
我在网站上的帖子中添加了更多详细信息.
正如迈克所说,迭代光标是最好的解决方案.我会添加以提供更好的性能,您可能希望获取一个数组来处理块而不是一次处理一个记录.
例:
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