【问题标题】:How do I Understand the difference between FOR EACH and FOR FIRST?我如何理解 FOR EACH 和 FOR FIRST 之间的区别?
【发布时间】:2019-09-05 02:00:20
【问题描述】:

我是新手,我想知道 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.

如果我的查询是错误的,那么请给我一个例子来理解其中的区别。我需要使用 FOR FIRST。

【问题讨论】:

  • 你认为为什么需要使用 FOR FIRST?
  • 因为我是新手,所以我需要通过所有程序来了解逻辑是如何进行的。在我们公司的员工中,大部分代码都是用 FOR FIRST 编写的。这就是我想知道它的含义的原因。

标签: openedge progress-4gl


【解决方案1】:

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

当有多个记录时,FOR EACH 一个接一个地处理每个记录。

FOR FIRST 仍将只处理一条记录。

【讨论】:

  • Mike 一如既往的正确,但我相信有一个重要的区别值得一提:for first 将记录留在范围内,然后结束,而 for each 则没有。为了说明,此代码将向您显示一个错误: FOR EACH tt_data: end。显示 tt_data。这段代码有效: FOR FIRST tt_data: end。显示 tt_data。
  • 我可能会挑剔,但如果您离开该块,FOR EACH 也会将记录留在范围内。如果允许块正常完成,则查询将结束并且没有当前记录在范围内。
  • 正确,汤姆,说得很好。
【解决方案2】:

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

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

FOR FIRST 也可以有 WHERE 和 BY。但是—— FOR FIRST 只适用于 ONE 记录。如果您指定的排序与 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.

使用 FOR FIRST 几乎总是一个错误和一个等待发生的错误。如果指定了 BY 子句,则更是如此。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2016-03-16
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多