我如何理解FOR EACH和FOR FIRST之间的区别?

时间:2019-04-15 05:52:02

标签: openedge progress-4gl

我是新来的进步者,我想知道FOR EACH和FOR FIRST有什么区别。我试图知道但没有得到可以理解和接受的理由。我写了一个小查询并得到了相同的结果。让我分享

DEFINE TEMP-TABLE tt_data
    FIELD womf AS CHARACTER
    FIELD pomf AS CHARACTER.

CREATE tt_data.
ASSIGN
    tt_data.womf = "BlockCar"
    tt_data.pomf = "Whitecar".


FOR EACH tt_data.
    DISPLAY tt_data.womf.
END.

FOR FIRST tt_data.
    DISPLAY tt_data.womf.
END.

如果我的查询错误,请给我一个例子,以了解不同之处。我需要先使用。

2 个答案:

答案 0 :(得分:3)

只有一条记录时没有区别。

如果有多个记录,则FOR EACH会依次处理每条记录。

FOR FIRST仍将仅处理单个记录。

答案 1 :(得分:2)

正如Mike所说,当只有一条记录(如您的示例代码中)时,没有区别。

当有多个记录时,FOR EACH处理由WHERE子句(如果存在)定义的整个集合,并按BY子句(如果存在)进行排序。

FOR FIRST还可以具有WHERE和BY。但是-FOR FIRST仅适用于一个记录。如果您指定的排序与WHERE子句产生的索引不同(或者缺少默认值),则这可能会造成极大的混乱。查询返回的第一个(也是唯一的)记录将被“排序”。换句话说,BY对选择没有影响。

下面的sports2000示例清楚地表明了这一点:

for each customer no-lock where custNum > 10 by name:
  display custNum name.
end.
pause.

for first customer no-lock where custNum > 10 by name:
  display custNum name.
end.

首先使用几乎总是一个错误,一个错误等待发生。因此,如果指定了BY子句,无疑会如此。