| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> help with triggers and mutating tables
Hello,
We're converting from Sybase to Oracle and I'm running into problems converting the triggers. We have a lot of tables that update other rows in the same table based on certain criteria. Although I can use the basic mutating table trick to compile a trigger and get it to work for a single column update, it doesn't work if I'm updating more than one column. In this example, for instance, if I update only supe, status or bid_days the trigger will correctly update the relevant row but if I try to update more than one only the first one referenced in the trigger updates. What am I missing?
Thanks,
Heidi
create or replace trigger seqpts_au_trigger
after update
on seqpoints
declare
sum_bid_days number;
begin
if ( seqpoints_pkg.fire )
then
seqpoints_pkg.fire := FALSE;
for seqPtCnt in 1 .. seqpoints_pkg.inserted.count
loop
if ( nvl(seqpoints_pkg.deleted( seqPtCnt ).supe,' ') <>
nvl(seqpoints_pkg.inserted( seqPtCnt ).supe,' ') and
seqpoints_pkg.inserted( seqPtCnt ).dept = 'effects' )
then
/* sim supe is same as lighting supe */
update seqpoints set supe =
seqpoints_pkg.inserted( seqPtCnt ).supe
where
seqpoints.seq_id=seqpoints_pkg.inserted( seqPtCnt ).seq_id
and seqpoints.dept = 'sim';
end if;
if ( seqpoints_pkg.deleted( seqPtCnt ).status <>
seqpoints_pkg.inserted( seqPtCnt ).status )
then
if (seqpoints_pkg.inserted( seqPtCnt ).dept='effects' and
seqpoints_pkg.inserted( seqPtCnt ).status='done')
then
update seqpoints set status='into'
where
seqpoints.seq_id=seqpoints_pkg.inserted( seqPtCnt ).seq_id
and seqpoints.dept='sim'
and seqpoints.status='pre-prod';
end if;
end if;
if ( seqpoints_pkg.deleted( seqPtCnt ).bid_days <>
seqpoints_pkg.inserted( seqPtCnt ).bid_days )
then
if (seqpoints_pkg.inserted( seqPtCnt ).dept='effects')
then
select sum(nvl(bid_days,0))
into sum_bid_days
from seqpoints
where
seqpoints.seq_id=seqpoints_pkg.inserted( seqPtCnt ).seq_id
and seqpoints.dept='effects'
and nvl(seqpoints.category,' ') != ' ';
update seqpoints set bid_days=sum_bid_days
where
seqpoints.seq_id=seqpoints_pkg.inserted( seqPtCnt ).seq_id
and seqpoints.dept='effects'
and nvl(seqpoints.category,' ')=' ';
end if;
end if;
end if;
end;
Received on Fri May 11 2007 - 11:05:29 CDT
![]() |
![]() |