G'day Rajesh,

Thankyou so much for your help, it worked correctly the very first time.

Note that I used something almost identical:
-----------------------------------------------------------------------------------------------------------
CREATE TRIGGER UPDATEFOOD
      AFTER UPDATE OF FOOD ON FOODNAMETABLE
      REFERENCING OLD AS PREVIOUSROW REFERENCING NEW AS NEWROW
      FOR EACH ROW MODE DB2SQL
      UPDATE FREQUENCYTABLE SET FOOD = NEWROW.FOOD
      WHERE FREQUENCYTABLE.FOOD = PREVIOUSROW.FOOD;
----------------------------------------------------------------------------------------------------------
This version threw an SQL syntax error which I incorrectly took to mean that
it wasn't possible to have more than one REFERENCING statement per
AFTER trigger.

Anyway, again:

Thanks matey (from the land down under).



From: Rajesh Kartha <[EMAIL PROTECTED]>
Reply-To: "Derby Discussion" <[email protected]>
To: Derby Discussion <[email protected]>
Subject: Re: NEWBIES TRIGGER CONFUSION PROBLEM
Date: Tue, 24 Jan 2006 17:55:10 -0800

How about change the trigger  from

CREATE TRIGGER UPDATEFOOD
       AFTER UPDATE OF FOOD ON FOODNAMETABLE
       REFERENCING OLD AS PREVIOUSROW
       FOR EACH ROW MODE DB2SQL
       UPDATE FREQUENCYTABLE SET FOOD = FOODNAMETABLE.FOOD
       WHERE FREQUENCYTABLE.FOOD = PREVIOUSROW.FOOD;

to be:

CREATE TRIGGER UPDATEFOOD AFTER UPDATE OF FOOD ON FOODNAMETABLE REFERENCING
 OLD AS PREVIOUSROW new as newrow FOR EACH ROW MODE DB2SQL UPDATE
FREQUENCYTABLE
 SET FOOD = newrow.FOOD WHERE FREQUENCYTABLE.FOOD = PREVIOUSROW.FOOD;

In your original create trigger statement, I think,  Derby should throw a
SQL error  when the actual table
name ('FOODNAMETABLE') is used in the 'Triggered-SQL-statement' instead of
using the referenced name ('newrow').

Regards,
Rajesh

On 1/24/06, Peter Bowman <[EMAIL PROTECTED]> wrote:
>
> Hi All,
>
> I have created the following tables in a Derby database:
> -------------------------------------------------------
>
> DROP TABLE FREQUENCYTABLE;
> DROP TABLE FOODNAMETABLE;
>
> CREATE TABLE FOODNAMETABLE (ID SMALLINT GENERATED ALWAYS AS IDENTITY,
>                             FOOD VARCHAR(40) NOT NULL PRIMARY KEY,
>                             FOLDER VARCHAR(40) NOT NULL);
>
> CREATE TABLE FREQUENCYTABLE (FREQUENCY VARCHAR(40) NOT NULL,
>                              FOOD VARCHAR(40) NOT NULL,
>                              AMOUNT SMALLINT NOT NULL DEFAULT 0,
>                              INCLUDE SMALLINT NOT NULL DEFAULT 0 CHECK
> (INCLUDE BETWEEN 0 AND 1));
>
> CREATE TRIGGER UPDATEFOOD
>        AFTER UPDATE OF FOOD ON FOODNAMETABLE
>        REFERENCING OLD AS PREVIOUSROW
>        FOR EACH ROW MODE DB2SQL
>        UPDATE FREQUENCYTABLE SET FOOD = FOODNAMETABLE.FOOD
>        WHERE FREQUENCYTABLE.FOOD = PREVIOUSROW.FOOD;
>
> -------------------------------------------------------
> The above trigger runs automatically whenever my application updates the
> FOOD column
> in FOODNAMETABLE, for example when the value in FOOD is changed from
> *Oranges*
> to *Lemons*. When this happens the trigger is supposed to change any row
> in
> FREQUENCYTABLE
> that also has *Oranges* in its FOOD column to *Lemons*, but this doesn't
> happen.
> By testing I have proved that the trigger runs and that it makes a change
> but my
> problem is it changes it to the wrong value. It seems that whereas
> PREVIOUSROW.FOOD
> equals *Oranges*, as expected ( i.e. because that was its value before the
> UPDATE on that
> table), FOODNAMETABLE.FOOD doesn't equal *Lemons* as I, seemingly
> incorrectly, expect.
>
> What's wrong with the trigger?
>
> Thanks,
>
> Peter.
>
> PS. I'm a newbie to databases, just two weeks.
>
>
>


Reply via email to