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