“PL/SQL sends SQL statements such as DML and queries to the SQL engine for execution, and SQL returns the results to PL/SQL. You can minimize the performance overhead of this communication between PL/SQL and SQL by using the PL/SQL features that are known collectively as bulk SQL.
The FORALL statement sends INSERT, UPDATE, or DELETE statements <i><b>in batches, rather than one at a time</b></i>. The BULK COLLECT clause <b><i>brings back batches of results from SQL</i></b>. If the DML statement affects four or more database rows, bulk SQL can improve performance considerably.
Bulk SQL <b><i>uses PL/SQL collections to pass large amounts of data back and forth in single operations</i></b>. This process is called bulk binding. <b><i>If the collection has n elements, bulk binding uses a single operation to perform the equivalent of n SELECT INTO, INSERT, UPDATE, or DELETE statements. A query that uses bulk binding can return any number of rows, without requiring a FETCH statement for each one</i></b>.”
Ref: <a href=”http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/tuning.htm#insertedID0″>Tuning PL/SQL Applications for Performance</a>
Hope this helps.