Re: TRIGGERS

  • From: Kean Jacinta <jacintakean@xxxxxxxxx>
  • To: oracle-l@xxxxxxxxxxxxx
  • Date: Wed, 18 May 2005 10:05:19 -0700 (PDT)

HI,

the error i get :

ORA-0001: unique constraint violated

Here is the entire create trigger

CREATE OR REPLACE TRIGGER "TESTDB"."MYCLASS_TR" BEFORE
INSERT
OR UPDATE ON "MYCLASS" FOR EACH ROW DECLARE
  REFCOUNT            NUMBER;
  DUP_VAL_ON_INDEX    EXCEPTION;
  TEMP                NUMBER;
 
BEGIN
   IF INSERTING THEN
      
      
  LOOP      
      SELECT COUNT(*) INTO REFCOUNT
      FROM MYCLASS
      WHERE :NEW.ID = ID;
                  
      IF REFCOUNT > 0 THEN --RECORD EXISTED IN
DATABASE
      SELECT MYCLASS_SEQ.NEXTVAL INTO TEMP FROM DUAL;
      END IF;     
      EXIT;
     --ELSIF REFCOUNT < 0 THEN
     -- EXIT;
     -- END IF;
      
              
      
  END LOOP;    
      
      IF :NEW.ID IS NULL THEN
      
            
      SELECT MYCLASS_SEQ.NEXTVAL 
      INTO :NEW.ID 
      FROM DUAL;
      END IF;
         
   END IF; --MAIN IF


END;

thank
JK


--- david wendelken <davewendelken@xxxxxxxxxxxxx>
wrote:
> I don't think you should be getting a unique key
> error with the pre-insert row trigger you are
> showing.
> I think you should be getting a totally different
> error.
> 
> Please show the entire create trigger statement, not
> just the pl/sql code in it.
> 
> -----Original Message-----
> From: Kean Jacinta <jacintakean@xxxxxxxxx>
> Sent: May 18, 2005 9:33 AM
> To: oracle-l@xxxxxxxxxxxxx
> Subject: Re: TRIGGERS
> 
> HI,
> 
> here is what i have written in trigger body, i am
> really stuck here. help me up , it;s still not
> working
> . System still complain about the unique key error.
> **:(
> 
> 
> DECLARE
>   REFCOUNT            NUMBER;
>   DUP_VAL_ON_INDEX    EXCEPTION;
>   TEMP                NUMBER;
>  
> BEGIN
>    IF INSERTING THEN
>       
>    LOOP      
>       SELECT COUNT(*) INTO REFCOUNT
>       FROM myclass
>       WHERE :NEW.id = id;
>                   
>       IF REFCOUNT > 0 THEN --RECORD EXISTED IN
> DATABASE
>       SELECT myclass_seq.NEXTVAL INTO TEMP FROM
> DUAL;
>       END IF;
>              
>       
>   END LOOP;    
>       
>       IF :NEW.ID IS NULL THEN
>       
>             
>       SELECT myclass_SEQ.NEXTVAL 
>       INTO :NEW.ID 
>       FROM DUAL;
>       END IF;
>          
>    END IF; --MAIN IF
> 
> END;
> 
> 
> Note : have no idea how to use the exception handler
> 
> 
> 
> 
> JKean
> 
> 
> 
> --- david wendelken <davewendelken@xxxxxxxxxxxxx>
> wrote:
> 
> > If you really want to handle that, you have three
> > choices:
> > 
> > 1) Live with it.   If you have a program that
> > assigns the id values for you, it should be
> getting
> > its next value from the sequence also.  If you do
> > that, this just isn't a problem in real life.  If
> > you aren't willing to ALWAYS get the next id value
> > from a sequence, you probably shouldn't be using a
> > sequence at all.
> > 
> > 2) Relatively simple, partial solution.  Use a
> > pre-statement trigger on insert, have it grab the
> > next sequence value and verify that the record for
> > that sequence number is not already in the table. 
> > If it is, get the next sequence value until you
> find
> > an empty one.  Assume that all the ones after that
> > are ok from then on.  Ignore the fact taht you
> throw
> > away a sequence number each time you do a
> statement.
> >  Remember, I said *partial* solution.
> > 
> > 3) Read up on mutating table errors and autonomous
> > transactions.  This will take you awhile to read
> and
> > experiment with.  We have time to help with
> specific
> > problems, but not to write it for you.
> > Ask again after you've read that material and are
> > are stuck.
> > 
> > 
> > 
> > -----Original Message-----
> > From: Kean Jacinta <jacintakean@xxxxxxxxx>
> > Sent: May 18, 2005 8:02 AM
> > To: david wendelken <davewendelken@xxxxxxxxxxxxx>
> > Subject: Re: TRIGGERS
> > 
> > david,
> > 
> > :P oh i see . I am so blur. My concern,
> > 
> > ID   
> > ---
> > 1  <-- autogenerated
> > 2  <-- autogenerated
> > 3  <-- autogenerated
> > 4  <-- manually created
> > 5  <-- manually created 
> > 
> > My current sequence stay at : 3 , if i issued an
> > autotgenerated insert again it will surely prompt
> > unique id alrdy existed... or some sort of
> database
> > error. How can then trigger being smart enough to
> > silently generate autoid 6 without raising error ?
> > 
> > I am very close to my objectives alrdy :P
> > 
> > Thank in advance
> > Jkean 
> > 
> 
> 
> 
>               
> __________________________________ 
> Yahoo! Mail Mobile 
> Take Yahoo! Mail with you! Check email on your
> mobile phone. 
> http://mobile.yahoo.com/learn/mail 
> --
> //www.freelists.org/webpage/oracle-l
> 
> --
> //www.freelists.org/webpage/oracle-l
> 


                
__________________________________ 
Do you Yahoo!? 
Yahoo! Mail - Find what you need with new enhanced search. 
http://info.mail.yahoo.com/mail_250
--
//www.freelists.org/webpage/oracle-l

Other related posts: