Congratulations - that's pretty much a textbook example of the worst possible way to write a piece of code.
You've got just about everything - commits inside a loop, row by row cursor processing, DML inside a loop, and repeated execution of the same piece of SQL.

The best thing to do would be to rewrite the whole thing as a single update statement.

The second best thing, (which will be slower than the above) is:
1) Get rid of the commit inside the loop.
2) Get the Select from Tmp.Raise_Code outside of the loop - nothing in it seems to depend on data from the cursor, so it'll return the same value every time you execute it.
3) Do a Bulk Collect from the cursor, and turn the Update in the loop into a Forall update
4) Tune the query in the cursor