当使用 FOREACH 语句时,如果来自查询的结果集要被更改,则不要使用此结果集作为 FOREACH 循环的退出条件。例如,如果 FOREACH 语句声明了一个期望返回 30 行的 Select 游标,但是 FOREACH 循环中的 DELETE 、INSERT 或 UPDATE 操作修改了此查询的结果集,这可能导致意外行为。要确保 FOREACH 循环按照预期工作,请确保 FOREACH 语句中的任何 Select 游标在您开始修改结果集之前完成执行。
避免从对查询结果返回的行执行 DML 操作的 FOREACH 循环产生意外结果的一种方法是在 SELECT 语句中使用 ORDER BY 子句来实现结果集。