Cursor input modes
For purposes of input, a cursor operates in one of two
modes, sequential or scrolling. A sequential
cursor can fetch only the next row in sequence, so a sequential cursor
can read through a table only once each time the cursor is opened.
A scroll cursor can fetch the next row or any of the output rows,
so a scroll cursor can read the same rows multiple times. The following
example shows a sequential cursor declared in
Informix® ESQL/C.
EXEC SQL DECLARE pcurs cursor for
SELECT customer_num, lname, city
FROM customer;
After the cursor is opened,
it can be used only with a sequential fetch that retrieves the next
row of data, as the following example shows:
EXEC SQL FETCH p_curs into:cnum, :clname, :ccity;
Each sequential fetch returns a new row.
A scroll cursor is declared
with the keywords SCROLL CURSOR, as the following example from
Informix® ESQL/C shows:
EXEC SQL DECLARE s_curs SCROLL CURSOR FOR
SELECT order_num, order_date FROM orders
WHERE customer_num > 104
Use the scroll
cursor with a variety of fetch options. For example, the ABSOLUTE
option specifies the absolute row position of the row to fetch.
EXEC SQL FETCH ABSOLUTE :numrow s_curs
INTO :nordr, :nodat
This statement fetches the row whose position is given in the host variable numrow. You can also fetch the current row again, or you can fetch the first row and then scan through all the rows again. However, these features can cause the application to run more slowly, as the next section describes. For additional options that apply to scroll cursors, see the FETCH statement in the Informix® Guide to SQL: Syntax.