Re: Convert PLSQL update with forall

  • From: Pawel Kwiatkowski <yarel79@xxxxxxxxx>
  • To: ax.mount@xxxxxxxxx
  • Date: Sun, 20 May 2018 21:22:47 +0200

Have you tried something like :

begin
  for indx in (complex query) loop
    update t1 set
          c3 = decode(c10,'NO',c2 + c4,c3),
  c5 = decode(c10,'NO',c5, c7 + c8)
    where
       c1 = indx.c1
and c2 = indx.c2;
  end loop;
end;
/

br,
Pawel

On Sun, May 20, 2018 at 5:42 PM, amonte <ax.mount@xxxxxxxxx> wrote:

Hello

I have a plsql procedure which contains a complex cursor and a couple of
update statements using the cursor output, it looks like


begin

for indx in (complex query)
loop

if indx.c10 = 'NO' then
update t1
set c3 = c2 + c4
where c1 = indx.c1
and c2 = indx.c2;
else
update t1
set c5 = c7 + c8
where c1 = indx.c1
and c2 = indx.c2
end if;

end loop;
end;
/

The cursor (join of 7 tabls and a few EXISTS subqueries) returns
aproximately 2 million rows and the process is not as fast as desired. I
was looking into FORALL to improve this procedure but I cannot find a way
due to the conditional updates (two different update statements). Anyone's
got an idea if FORALL can be implemented in such situations?

Thank you very much

Alex


Other related posts: