Wednesday 5 February 2014

How to use bulk collect to optimize PL/SQL performance

BULK COLLECT is used to retrieve chunk of records from disk to memory instead of retrieving records one by one. It's vary useful when you are reading from a table consisting of huge number of records.
Here is an example script how to use BULK COLLECT.
We are using a table employee_master and we will print value from 2 columns emp_code and emp_name.

--------------------------------------------------------------------------------------------------------------
declare
-------declaring the cursor emp_rec  which retrieves all columns from employee_master----
cursor emp_rec is select * from employee_master;
------  declare avariable of type employee_master record type ---------
rec_emp employee_master%rowtype;
------- declare a type TABLE consisting of employee_master record type.
type tbl_rec is TABLE of rec_emp;
------declare a variable of TABLE type---------
var_rec tbl_rec;

i            PLS_INTEGER;

begin
------Open the cursor -----------
open emp_rec;
loop

--------fetch record chunk into var_rec --------
fetch emp_rec BULK COLLECT into var_rec;

  for i in 1..var_rec.COUNT loop
       --------Set buffer size for dbms_output ------------
      dbms_output.enable(500);
     
     dbms_output.put_line(var_rec(i).emp_code||'   ,    '||var_rec(i).emp_name);     
  end loop;
end loop;
end;
/