The same progression (explicit row by row processing, bulk binding, bulk binding in native dynamic SQL) is supported for DML (insert, update and delete) thus
declare
type employee_ids_t is table of employees.employee_id%type
index by binary_integer;
employee_ids employee_ids_t;
begin
employee_ids(1) := 151;
employee_ids(2) := 162;
employee_ids(3) := 173;
for j in employee_ids.first..employee_ids.last
loop
update employees set salary = salary*1.1
where employee_id = employee_ids(j);
end loop;
end;
then
forall j in employee_ids.first..employee_ids.last
update employees set salary = salary*1.1
where employee_id = employee_ids(j);
then
forall j in employee_ids.first..employee_ids.last
execute immediate 'update employees set salary = salary*1.1'
|| ' where employee_id = :the_id'
using employee_ids(j) /* new at 9i */;