Here are several optimizing tips for cursors:
Optimize cursor selects using the cursor, not an ad hoc query.
Use union or union all instead of or clauses or in lists.
Declare the cursor’s intent.
Specify column names in the for update clause.
Fetch more than one row if you are returning rows to the client.
Keep cursors open across commits and rollbacks.
Open multiple cursors on a single connection.