Ggf. liegts ja daran, dass der Begriff UDF (User Defined Function) gerne auch mit UDP (User Defined Procedure) zusammengefasst bzw. verwechselt wird.
Wenn ich mir vorstelle, dass bei einer UDF tatsächlich ein Commit passiert, dass daraufhin (fast) jeder Leser-Cursor sofort geschlossen wird und somit noch mitten im Fetch der Cursor weg ist....

Das ist bei ODBC tatsächlich anders. Da eine Transaktion einem oder mehreren Command zugeordnet wird, bleibt dieser auch nach Commit/Rollback weiter offen. Einen "Declare Cursor .... with Hold" gibts da gar nicht und scheint somit standard zu sein.

Off Topic:
Gerade beim "Cursor .. with hold" wurde mir letztens klar, dass dies wohl nur für dem Commit, nicht aber für den Rollback gilt. Um den Cursor dann offen zu halten, musste ich den Savepoint bemühen um einen Rollback Savepoint zu machen. Dadurch blieb der Cursor dann offen.