declare
  -- INSERT many rows, bulk syntax

  -- static SQL
  -- fails at 9.0.1 PL/SQL: ORA-00906:
  -- missing left parenthesis
  v_emprecs Emp_Util.emprec_tab_t  := Emp_Util.Get_Many_Rows;
begin

  forall j in v_emprecs.first..v_emprecs.last
    insert into employees_2 values v_emprecs(j);
end;
/
-- PL/SQL procedure successfully completed.
rollback /* prepare for repeat or for next sample */;

-- Rollback complete.





declare

  -- Rework the above to handle possible exceptions on INSERT
  bulk_errors exception;
  pragma exception_init ( bulk_errors, -24381 );
  v_emprecs Emp_Util.emprec_tab_t  := Emp_Util.Get_Many_Rows;
begin
  v_emprecs(1).employee_id :=
    /* contrive "unique constraint violated" error on INSERT */
    v_emprecs(2).employee_id;

  forall j in v_emprecs.first..v_emprecs.last save exceptions
    insert into employees_2 values v_emprecs(j);
exception when bulk_errors then
  for j in 1..sql%bulk_exceptions.count
  loop
    Dbms_Output.Put_Line ( 'Error from element #' ||
      To_Char(sql%bulk_exceptions(j).error_index) || ': ' ||
      Sqlerrm(-sql%bulk_exceptions(j).error_code) );
  end loop;

end;
/
-- PL/SQL procedure successfully completed.
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.