ok, thank to all

On Tue, Jul 30, 2013 at 3:30 PM, Beena Emerson <memissemer...@gmail.com>wrote:

> Hi again,
>
> IIUC you want to update the alarm table only when the speed limit is above
> 100. You cannot achieve it by the view and triggers you have written here
> because the trigger will be fired even for values < 100
>
> =# INSERT INTO speedv VALUES (1, 'test', 10);
> INSERT 0 1
>
> =# SELECT * FROM speedv;
>  id | type | speed
> ----+------+-------
> (0 rows)
>
> =# SELECT * FROM car;
>  id | type | speed
> ----+------+-------
> (0 rows)
>
> =# SELECT * FROM alarm;
>  name | id | type  |            init            | fired | t_end | t_user
> ------+----+-------+----------------------------+-------+-------+--------
>  test |  0 | SPEED | 2013-07-30 18:08:01.006979 |       |       |
>  test |  0 | SPEED | 2013-07-30 18:20:00.73507  |       |       |
> (2 rows)
>
> If you want to update the alarm table for speed > 100 then use an if else
> clause in the trigger function:
>
> CREATE OR REPLACE FUNCTION update_alarm_view() RETURNS TRIGGER AS
> $alarm_tg$
>     BEGIN
>         IF (new.speed > 100) THEN
>                IF (TG_OP = 'UPDATE') THEN
>                    INSERT INTO alarm  VALUES(NEW.type,
> 0,'SPEED',now(),NULL,NULL,'');
>                ELSEIF (TG_OP = 'INSERT') THEN
>                     INSERT INTO alarm VALUES(NEW.type,
> 0,'SPEED',now(),NULL,NULL,'');
>                 END IF;
>         END IF;
>         RETURN new;
>     END;
> $alarm_tg$ LANGUAGE plpgsql;
>
> And write the trigger on the car table.
>
>
>
> --
>
> Beena Emerson
>
>

Reply via email to