Total Pageviews

April 7, 2019

4/07/2019 01:09:00 PM
DECLARE

  TYPE Numlist IS VARRAY (100) OF NUMBER;
  Id NUMLIST := NUMLIST(7902, 7698, 7839);
BEGIN
-- Efficient method, using a bulk bind
  FORALL i IN Id.FIRST..Id.LAST -- bulk-bind the VARRAY
    UPDATE emp SET Sal = 1.1 * Sal
    WHERE Mgr = Id(i);
-- Slower method, running the UPDATE statements within a regular loop
  FOR i IN Id.FIRST..Id.LAST LOOP
    UPDATE emp SET Sal = 1.1 * Sal
    WHERE Mgr = Id(i);
  END LOOP;
END;
/

Without the bulk bind, PL/SQL sends a SQL statement to the SQL engine for each employee that is updated, leading to context switches that hurt performance. If you have a set of rows prepared in a PL/SQL table, you can bulk-insert or bulk-update the data using a loop which improves performance:

 
Related Posts Plugin for WordPress, Blogger...