declare
  -- UPDATE ... SET ROW for many rows, bulk syntax

  -- static SQL
  -- fails at 9.2.0 with PLS-00436:
  -- implementation restriction: cannot reference fields
  -- of BULK In-BIND table of records
  v_emprecs Emp_Util.emprec_tab_t  := Emp_Util.Get_Many_Rows;

begin
  forall j in v_emprecs.first..v_emprecs.last
    update employees_0 set row = v_emprecs(j)
      where employee_id = v_emprecs(j).employee_id;  
end;
/

-- ERROR at line N:
rollback /* prepare for repeat or for next sample */;
-- Rollback complete.






declare
  -- WORKAROUND
  -- fails at 9.0.1 with PL/SQL: ORA-00904:
  -- invalid column name
  v_emprecs Emp_Util.emprec_tab_t  := Emp_Util.Get_Many_Rows;
  type Employee_Id_Tab_t is table of employees.employee_id%type
    index by binary_integer;

  v_employee_ids Employee_Id_Tab_t;
begin
  for j in v_emprecs.first..v_emprecs.last loop
    v_employee_ids(j) := v_emprecs(j).employee_id; end loop;

  forall j in v_emprecs.first..v_emprecs.last
    update employees_0 set row = v_emprecs(j)
      where employee_id = v_employee_ids(j);  
end;

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