I see what you're saying.  That won't really help, because I'll still be
duplicating changes in the update and insert triggers every time I add a
new field.  The hope was that I would only need to do it once.  Your
method sounds like it could become costly from an execution time
perspective if a lot of fields require the validation.

 

For example, one field has to be >= 0, so I put this validation

 

If new.sector < 0 then

  Set new.sector := 0;

End if;

 

For the time being, I have that in two separate triggers, the INSERT and
the UPDATE triggers.  Where as Oracle would allow me to define the
trigger as "on UPDATE or INSERT on <tablename>"

 

I guess I'll have to do it the long way, and keep an eye out for changes
to MySQL that will allow me to optimize it later.

 

Dan.

 

 

________________________________

From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, November 09, 2005 9:59 AM
To: Burke, Dan
Cc: mysql@lists.mysql.com
Subject: Re: Triggers that handle multiple events (insert and update)

 



"Burke, Dan" <[EMAIL PROTECTED]> wrote on 11/09/2005 09:05:50 AM:

> Hello,
> 
> Can triggers in 5.0 handle multiple events?  I have some range
checking
> I'd like to enforce at the database level when inserting or updating a
> record, and I'm finding myself duplicating trigger code to make an
> INSERT and an UPDATE trigger, which makes it harder to maintain in the
> long run, especially considering I want to do this for multiple
tables.
> 
> I looked through the documentation and couldn't find any example, and
> then did some experimenting, but I could not get what I'm looking for.
> 
> It could be the fact that I'm stuck in an Oracle mentality when it
comes
> to triggers, so maybe there's a different way to do what I want to do
> without duplicating code.  Like can I pass the "new" object to a
> procedure and do the checking in there?  (what would be the syntax to
> create that procedure if it's possible?)  That way I could still have
> one only place to do the range/limit checking.
> 
> I dislike duplicating code (mainly because I know myself).  Inevitably
> I'll forget to update one or the other place and get burned for it
when
> I least suspect it.  But if this is a symptom of mysql triggers being
a
> young still, where is the best place to submit a feature request? :)
> 
> Thanks,
> Dan.
> 

I wouldn't use a stored procedure but a FUNCTION to do the validation.
The trigger fires for each row and there isn't a row-type data type so
you are going to need to pass into the function each field you need to
evaluate. Overall, I don't see why you have to write two functions but
you will need to define two triggers and point each of them to the
common validation function. 

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html 

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

Reply via email to