Since the typical use of loop statements is to process
one return value/row at a time and not accumulate values, all looping
statements in (syntax) version 8 are non-accumulating (as if
ROW
were given in version 7), and the non-looping (self-closed)
versions accumulate values. Thus the ROW
flag is redundant in
(syntax) version 8 - and is no longer permitted.
This helps prevent inadvertent memory wastage (by forgetting the
ROW
flag in loops), as well as prevents problems due to
inadvertently attempting to modify $ret
etc. in a loop context
(type and number of values cannot be changed).
In scripts, sometimes return values are processed more than once - a
situation often handled in (syntax) version 7 with a non-ROW
looping statement that processes values, followed by an explicit
<LOOP>
that processes again. Such constructs in (syntax)
version 8 and later must use a non-looping statement (to accumulate),
followed by two <LOOP>
s.
See the syntaxversion
pragma (here)
for more details, as well as the --translate-from-version option
(here) for aid in modifying
existing scripts.