Search Postgresql Archives

Re: Need help on triggers - postgres 9.1.2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> > -----Original Message-----
> > From: Khangelani Gama [mailto:kgama@xxxxxxxxxxxx]
> > Sent: Thursday, May 22, 2014 9:38 AM
> > To: 'Adrian Klaver'; 'pgsql-general@xxxxxxxxxxxxxx'
> > Subject: RE: [GENERAL] Need help on triggers - postgres 9.1.2
> >
> > Hi all
> >
> > Something it's tricky for me here, see my trigger I wrote below. What
> > can I do to insert c_code from center table  INTO center_changed table
> > with ONLY the c_code where the update was made or where an INSERT of
> > the new entry INTO center table what made  .
> >
> >
> > Let's say the center table has got the following values. When I try to
> > change c_dsc from KITWE to KIT where c_code ='0204' the trigger should
> > take cde 0204 and insert it into center_changed table with a time
> > stamp. So the main problem I have it's to populate the table called
> center_changed.
> >
> >
> > c_cde |                    c_desc                     | c_active
> > --------+------------------------------------------------+----------
> >  0094   | GABORONE WAREHOUSE                             | f
> >  0204   | KITWE                                          | t
> >
> >
> >
> >
> >
> >
> > CREATE TABLE center_changed (
> >     c_cde            text   NOT NULL,
> >     stamp             timestamp NOT NULL
> > );
> >
> > CREATE OR REPLACE FUNCTION check_center_changes() RETURNS
> TRIGGER AS
> > $center_changed$
> >
> > BEGIN
> >
> >         IF (TG_OP = 'UPDATE') THEN
> >             INSERT INTO center_changed SELECT c_cde, now();
> >             RETURN NEW;
> >         ELSIF (TG_OP = 'INSERT') THEN
> >             INSERT INTO center_changed SELECT c_cde, now();
> >             RETURN NEW;
> >         END IF;
> >         RETURN NULL;
> > END;
> > $center_changed$ LANGUAGE plpgsql;
> >
> > CREATE TRIGGER center_changed
> > AFTER INSERT OR UPDATE ON center
> >         FOR EACH ROW EXECUTE PROCEDURE check_center_changes();
> >

This should work:

CREATE OR REPLACE FUNCTION check_center_changes() RETURNS
 TRIGGER AS  $center_changed$
 BEGIN
    INSERT INTO center_changed VALUES(new.c_cde, now());
             RETURN NEW;
END;
 $center_changed$ LANGUAGE plpgsql;

 CREATE TRIGGER center_changed
 AFTER INSERT OR UPDATE ON center
         FOR EACH ROW EXECUTE PROCEDURE check_center_changes();

Regards,
Igor Neyman


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux