For each, for first, for next, etc…

zpět

 

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 */