Consultor Eletrônico



Kbase P112150: RECID comparison in WHERE clause is ignored in EACH child of table syntax
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   12/29/2005
Status: Unverified

FACT(s) (Environment):

Oracle DataServer
OpenEdge 10.0B

SYMPTOM(s):

defined buffer for table and used buffer in for each loop

for each loop also has syntax for each child of table

comparison of RECID in where clause ignored for child table

CAUSE:

This is a known issue being investigated by Development.

FIX:


To workaround this issue remove the RECID comparison from the WHERE clause and put into the for each block or use two FOR EACH blocks.

Original Code:

DEFINE BUFFER myorder FOR order.
FIND FIRST order WHERE cust-num = 63.

FOR EACH customer WHERE cust-num = 63 NO-LOCK,
EACH myorder OF customer WHERE RECID(myorder) <> RECID(order):
DISPLAY RECID(myorder)
RECID(order).
END.
Workaround 1:
DEFINE BUFFER myorder FOR order.
FIND FIRST order WHERE cust-num = 63.

FOR EACH customer WHERE cust-num = 63 NO-LOCK,
EACH myorder OF customer:
IF RECID(myorder) = RECID(order) THEN NEXT.
DISPLAY RECID(myorder)
RECID(order).
END.
Workaround 2:
DEFINE BUFFER myorder FOR order.
FIND FIRST order WHERE cust-num = 63.

FOR EACH customer WHERE cust-num = 63 NO-LOCK:
FOR EACH myorder OF customer WHERE RECID(myorder) <> RECID(order):
DISPLAY RECID(myorder)
RECID(order).
END.