Retrieves the next record from a record stream. The FETCH
statement is used:
o After a START_STREAM statement
o Before any other RDML statements that affect the context
established by the START_STREAM statement
The FETCH statement advances the pointer for a record stream to
the next record of a relation. Unlike the FOR statement, which
advances to the next record automatically, the FETCH statement
allows you explicit control of the record stream. For instance,
you might use the FETCH statement to print a report where the
first six rows have five columns, and the seventh row only three.
1 – Examples
The following programs demonstrate the use of the FETCH statement
to advance a pointer in an open stream. These programs
o Fetch a record from a stream specified by the DECLARE_STREAM
statement
o If at least one record is found, enter a "while" loop
o Modify the record
o Fetch and modify all the records in the stream
o End the stream
1.1 – C Example
#include <stdio.h>
#define TRUE 1
#define FALSE 0
DATABASE PERS = FILENAME "PERSONNEL";
DECLARE_STREAM sal USING SH IN SALARY_HISTORY
WITH SH.SALARY_AMOUNT LT 10000;
int end_of_stream;
main()
{
READY PERS;
START_TRANSACTION READ_WRITE;
START_STREAM sal;
FETCH sal
AT END
end_of_stream = TRUE;
END_FETCH;
while (! end_of_stream)
{
MODIFY SH USING
SH.SALARY_AMOUNT = SH.SALARY_AMOUNT * (1.5);
END_MODIFY;
FETCH sal
AT END
end_of_stream = TRUE;
END_FETCH;
}
END_STREAM sal;
COMMIT;
FINISH;
}
1.2 – Pascal Example
program anycond (input,output);
DATABASE PERS = FILENAME 'PERSONNEL';
var
end_of_stream : boolean;
DECLARE_STREAM sal USING SH IN SALARY_HISTORY
WITH SH.SALARY_AMOUNT LT 10000;
begin
READY PERS;
START_TRANSACTION READ_WRITE;
START_STREAM sal;
FETCH sal
AT END
end_of_stream := TRUE;
END_FETCH;
while not end_of_stream do
begin
MODIFY SH USING
SH.SALARY_AMOUNT := SH.SALARY_AMOUNT * (1.5);
END_MODIFY;
FETCH sal
AT END
end_of_stream := TRUE;
END_FETCH;
end;
END_STREAM sal;
COMMIT;
FINISH;
end.
2 – Format
(B)0[m[4mFETCH[m qq> stream-name qqqqqqqwqq>qqqqqqqqqqqqqwqqqqqk
mqq> on-error qqqj x
lqqqqqqqqqqqqqqqqqq<qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
mqwqq>qqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwqqq>
tqq> [4mAT[m [4mEND[m qqwqq> statement qqwq> [4mEND_FETCH[m qqu
x mqqqqqqq<qqqqqqqqj x
mqq> [4mEND_FETCH[m qqqqqqqqqqqqqqqqqq>qqqqqqqqqqqqqqj
2.1 – Format arguments
stream-name The stream from which you want to FETCH
the next record.
on-error The ON ERROR clause. Specifies host
language statement(s) to be performed
if an error occurs during the FETCH
operation. For more information see the
entry on ON ERROR.
statement Any valid RDML or host language statement
to be executed when your program reaches
the end of a record stream. Use a
semicolon (;) at the end of each RDML,
Pascal, or C statement.