> But when I select the table again, I found it not changed.
> Anybody know the reason, maybe there are some wrong way by > which I use the cursor.
It has nothing to do with the way you are using the cursor; your problem is that you are causing an error by attempting to COMMIT inside a function (which is not allowed). This rolls back the subtransaction defined by the BEGIN/EXCEPTION block. You then suppress any display of the error with the WHEN OTHERS block.