--- In [email protected], "unordained" <unordained_00@...> wrote:
> > 
> > declare LOCATION integer;
> > declare ARTICLEID varchar(20);
> > BEGIN
> >   select first 1 NEWLOCATION, ARTICLEID from ARTICLE
> >         where ARTICLE.CUSTID = NEW.CUSTID
> >         and ARTICLE.ISACTIVE = 'F'
> >         and ARTICLE.NEWLOCATION is not null
> >           order by NEWLOCATION
> >           into :LOCATION, :ARTICLEID;
> > 
> >   NEW.NEWLOCATION = LOCATION;
> > end
> > 
> > This then (sometimes) assigns values of NEWLOCATION for Articles with 
> > ISACTIVE = 'T'.
> ------- End of Original Message -------
> 
> Here's my reversed-engineered documentation for the order of operations of 
> Firebird triggers (in the context of other stuff going on): 
> 
> http://pseudotheos.com/view_object.php?object_id=1619
> 
> In your case, I'd be worried about:
>  - default value of :LOCATION when "first 1" finds none

Like I wrote the example is simplified. Handling of that situation was omitted.

>  - concurrent transactions (you're sure the trigger would have known those 
> articles were active?)

The problrm also occurs with only one user (in our test environment).

>  - are you ever bulk-inserting articles that are all for the same customer? 
> (a 
> bulk-insert operation may do its job in any order, but the trigger for each 
> row 
> as it happens, weird things could happen)

We sometimes do. But as it also happens with single inserts, I'll worry about 
those later.

Hans



Reply via email to