For each, for first, for next, etc…
WHERE LOOKUP() – ekvivalent SQL WHERE … IN (…)
Příklad:
FOR EACH emp NO-LOCK WHERE LOOKUP (STRING(emp.ID), „1, 5, 89“) > 0.
Příklad:
DEFINE VARIABLE list_of_departments AS CHARACTER NO-UNDO INITIAL „RD, MAN, PR, HR“.
FOR EACH emp NO-LOCK WHERE LOOKUP (CAPS(emp.DEP), list_of_departments) > 0.
LEAVE – přerušení cyklu
DEFINE VARIABLE i AS INTEGER INITIAL 0 NO-UNDO .
dataLoop:
FOR EACH Table
NO-LOCK:
/* nějaký kód */
i = i + 1 .
IF i = 10 THEN
LEAVE dataLoop.
END.
FIRST-OF() – ekvivalent SQL SELECT DISTINCT
Následující ukázky kódu zobrazují, jak implementovat ekvivalent SQL SELECT DISTINCT pro použití v příkazech FOR EACH.
Příklad:
FOR EACH SomeTable
NO-LOCK
WHERE SomeConditions
BREAK
BY SomeField:
IF FIRST-OF(SomeField) THEN DO:
/* nějaký kód */
END.
END.
Příklad:
FOR EACH SomeTable
NO-LOCK
WHERE SomeConditions
BREAK
BY SomeField1
BY SomeField2:
IF FIRST-OF(SomeField1) AND FIRST-OF(SomeField2) THEN DO:
/* nějaký kód */
END.
END.
FOR FIRST – vyhledání prvního výskytu záznamu v tabulce
define variable result as logic.
define temp-table ttTest
field poradi as integer
field jmeno as character
index poradi is primary poradi
index jmeno jmeno.
create ttTest.
assign
poradi = 1
jmeno = „e“.
create ttTest.
assign
poradi = 2
jmeno = „d“.
create ttTest.
assign
poradi = 3
jmeno = „c“.
create ttTest.
assign
poradi = 3
jmeno = „cc“.
create ttTest.
assign
poradi = 3
jmeno = „ccc“.
create ttTest.
assign
poradi = 4
jmeno = „b“.
create ttTest.
assign
poradi = 5
jmeno = „a“.
assign result = false.
for first ttTest by jmeno:
display ttTest. /* 5 a */
assign result = true.
end.
if result = true then display „zaznam byl nalezen“. /* zaznam byl nalezen */
else display „zaznam nebyl nalezen“.
assign result = false.
for first ttTest by poradi:
display ttTest. /* 1 e */
assign result = true.
end.
if result = true then display „zaznam byl nalezen“. /* zaznam byl nalezen */
else display „zaznam nebyl nalezen“.
assign result = false.
for first ttTest where poradi = 3 by jmeno:
display ttTest. /* 3 c */
assign result = true.
end.
if result = true then display „zaznam byl nalezen“. /* zaznam byl nalezen */
else display „zaznam nebyl nalezen“.
assign result = false.
for first ttTest where poradi = 1000 by jmeno:
/* neprovede se */
display ttTest.
assign result = true.
end.
if result = true then display „zaznam byl nalezen“.
else display „zaznam nebyl nalezen“. /* zaznam nebyl nalezen */