noob
noob

Reputation: 279

How to add the IF THEN ELSE in the BY/BREAK BY keyword of FOR EACH?

here is the sample that i want to ask:

FOR EACH table-name.... NO LOCK BY (IF TRUE THEN sort-this ELSE sort-that + sort-that2).

END.

This would result in an error.

if it is just

FOR EACH .. NO LOCK BY (IF TRUE THEN sort-this ELSE sort-that).
END.

then there is no error. Progress would accept the code

What is need is if condition is true then sort by one field else sort by two or more fields

Upvotes: 2

Views: 957

Answers (3)

jdpjamesp
jdpjamesp

Reputation: 772

If you are in a modern enough version of Progress, then you could construct a dynamic query. This will be more efficient in terms of run time as well as getting you round your problem as having IF statements in your query predicate will make index selection hard.

QueryString = "for each table no-lock...".
if true then 
  QueryString = QueryString + " by sort-this".
else
  QueryString = QueryString + " by sort-that by sort-other".

create query QueryHandle.
QueryHandle:add-buffer(buffer table:handle).
QueryHandle:query-prepare(QueryString).
QueryHandle:query-open.
do while QueryHandle:get-next():
  /*some stuff*/
end.
QueryHandle:query-close.
delete object QueryHandle.

Upvotes: 2

Mike Fechner
Mike Fechner

Reputation: 7192

As per the previous reply, this is not supported.

Typically, you'd have to prepare the result into a temp-table first, using a logical field in the temp-table for the result of your IF THEN ELSE expression.

Upvotes: 1

Austin
Austin

Reputation: 1255

Unfortunately, this syntax is not supported. As per the documentation, BREAK/BY expects an expression following it but not a statement.

Upvotes: 0

Related Questions