Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: Insert & Update triggers fire together when a new record is created.
Yogi wrote:
> yagnesh_shah_at_hotmail.com (Yogi) wrote in message news:<272bd3a7.0212300342.3b5a36a1_at_posting.google.com>...
>
>>"Karsten Farrell" <kfarrell_at_belgariad.com> wrote in message news:<IE_O9.90206$vb3.3475470_at_news2.west.cox.net>... >> >>>"Yogi" <yagnesh_shah_at_hotmail.com> wrote in message >>>news:272bd3a7.0212270422.42417649_at_posting.google.com... >>> >>>>Hi, >>>> >>>>I have two triggers, one when an insert is performed and the other >>>>when an update is performed. I use these triggers to synchronize two >>>>billing systems. So when a new account is created I update a temp >>>>table with a tag of 'NEW' and when a account is modified I send it >>>>with a tag of 'CHG'. But I create a new record both of the triggers >>>>fire and I get both the tags 'NEW' and 'CHG' in my temp table. Is >>>>there a way I could avoid this only when I am creating new accounts. I >>>>would be grateful if someone could help me. Thanks in advance. >>>> >>>>Thanks >>>>Yogi >>> >>>Have ONE trigger (after insert or update) with an IF statement: >>> >>>if inserting then >>> ...stuff for insert... >>>elsif updating then >>> ...stuff for update... >>>end if; >>> >>>You might also need (if required) to define it as an autonomous transaction >>>so you can commit your NEW and CHG in the trigger without commiting the >>>other stuff. >> >>The insert trigger is: >>CREATE OR REPLACE TRIGGER NewCustomers >> AFTER INSERT ON table >> REFERENCING NEW AS newRow >> FOR EACH ROW >> WHEN (newRow.account_type = 1) >>BEGIN >> INSERT INTO CUSTOMERS VALUES('NEW', :newRow.account_no, NULL); >> END NewCustomers; >> >>and the modify trigger is: >>CREATE OR REPLACE TRIGGER ModifyCustomers >> AFTER UPDATE ON table >> REFERENCING OLD AS oldRow >> FOR EACH ROW >> WHEN (oldRow.account_type = 1 AND UPPER(oldRow.chg_who) NOT LIKE '%BIP%') >>BEGIN >> INSERT INTO CUSTOMERS VALUES('CHG', :oldRow.account_no, NULL); >> END ModifyCustomers;
I think the problem is *not* in the trigger, but in the code that is firing the trigger. It's a common coding technique to attempt an UPDATE (since most of the time the record will be there); but if an error is thrown, do an INSERT instead. You might want to see if this is the case.
I can see nothing inherently wrong with the trigger, so you need to look elsewhere. Received on Tue Dec 31 2002 - 10:22:43 CST