You mean a forall merge?
create table t (
c1 int primary key,
c2 int
);
insert into t values ( 1, 1 );
commit;
declare
type tab is table of t%rowtype index by pls_integer;
rec tab;
begin
rec(1).c1 := 1;
rec(1).c2 := 100;
rec(2).c1 := 2;
rec(2).c2 := 2;
forall i in 1 .. rec.count
merge into t
using ( select rec(i).c1 c1, rec(i).c2 c2 from dual ) r
on ( t.c1 = r.c1 )
when not matched then
insert values ( r.c1, r.c2 )
when matched then
update set c2 = rec(i).c2;
end;
/
select * from t;
C1 C2
1 100
2 2