title: Update every row with a function's return value in Oracle
body: <p>I have a cursor and a for to update a table's every row, using a function to get the new value. The table can contain thousands of rows. The function returns a simple string and it is already used in a lot of existing programs, so changing it is not an option.</p>
  
  <pre><code>var_item VARCHAR2(20);
  CURSOR cursor IS
      SELECT DISTINCT column1 FROM table1;
  
  BEGIN
  OPEN cursor;
  LOOP
  FETCH cursor INTO var_item;
  EXIT WHEN cursor%NOTFOUND;
      UPDATE table1 SET status = (SELECT check_status(var_item) FROM dual) WHERE column1 = var_item;
  END LOOP;
  CLOSE cursor;
  END;
  </code></pre>
  
  <p>My question is, is there a faster way to do this? I don't like to use cursor because they are very slow. Is there a way to use a simple update for this kind of job? Or to speed up cursors?
  I saw a lot of stuff about BULK COLLECT and SELECT FOR UPDATE but I don't really understand these things to tell the truth.
  Can someone help me how to do it efficiently, without using too much database performance?
  Thanks in advance.</p>