SENSITIVE is an optional cursor attribute defined in the SQL standard and implemented in a few enterprise databases. When a cursor is declared as SENSITIVE, the database engine tries to ensure that each FETCH reflects committed inserts, updates, or deletes made by other transactions after the cursor was opened. This contrasts with INSENSITIVE (a static snapshot) and ASENSITIVE (leave the choice to the optimizer). Because the engine must continually reconcile the result set with the underlying tables, SENSITIVE cursors can consume more resources and may behave differently depending on the transaction isolation level. Implementations treat the keyword as a request, not an absolute guarantee: some optimizers silently downgrade the cursor to ASENSITIVE or INSENSITIVE if they cannot provide sensitivity efficiently.
SQL:1999 standard; first vendor adoption in IBM Db2 7.1
A SENSITIVE cursor requires the database to track row modifications, which can add CPU, memory, and I/O overhead, especially for large result sets.
Yes. Declaring a SENSITIVE cursor with the FOR UPDATE clause lets you both see external changes and issue positioned updates, provided your engine supports both features.
SENSITIVE explicitly requests live visibility of row changes. ASENSITIVE leaves the choice to the optimizer; it may behave as either SENSITIVE or INSENSITIVE depending on cost estimates.
No. Isolation levels still apply. Under SERIALIZABLE you may not see concurrent changes even with SENSITIVE, while under READ COMMITTED you typically will.