If you have a cursor, DB2 sometimes tries not to read (materialized in a temp table) the entire cursor until you fetch each specific row. Therefore, DB2 may not know how many rows there are in the cursor until you fetch them all (although sometimes it does, especially if you have an ORDER BY).
In cases where the cursor is not materialized, the rows in the cursor are not locked until fetched, so they could be deleted before you access them (or more rows could be inserted).