Keith Medcalf, on Tuesday, January 14, 2020 11:49 AM, wrote...
>
>
> On Tuesday, 14 January, 2020 09:03, Jose Isaias Cabrera
> <jic...@outlook.com> wrote:
>
> >That is an idea I have not thought about, Neal.  Thanks.  The boss comes
> >up with lots of requests, and these have to be done yesterday. I will
> >have to look into triggers. Have not used them yet. :-(
>
> Here is some sample triggers that records the changes as they happen ...
> create table t
> (
>     n integer primary key,
>     a not null,
>     b,
>     c,
>     d,
>     e,
>     idate not null,
>     unique (a, idate)
> );
> create table audit_t
> (
>     a not null,
>     changed not null,
>     idate not null,
>     variable not null,
>     oldv,
>     newv
> );
>
> create trigger t_upd_1 after insert on t begin
>     insert into audit_t
>     select new.a,
>            julianday(),
>            new.idate,
>            'b',
> (select b from t where a == new.a and idate < new.idate order by idate
> desc) as oldv,
>            new.b as newv
>      where newv <> oldv;
>     insert into audit_t
>     select new.a,
>            julianday(),
>            new.idate,
>            'c',
> (select c from t where a == new.a and idate < new.idate order by idate
> desc) as oldv,
>            new.c as newv
>      where newv <> oldv;
>     insert into audit_t
>     select new.a,
>            julianday(),
>            new.idate,
>            'd',
> (select d from t where a == new.a and idate < new.idate order by idate
> desc) as oldv,
>            new.d as newv
>      where newv <> oldv;
>     insert into audit_t
>     select new.a,
>            julianday(),
>            new.idate,
>            'e',
> (select e from t where a == new.a and idate < new.idate order by idate
> desc) as oldv,
>            new.e as newv
>      where newv <> oldv;
> end;
>
> create trigger t_upd_nocando before update of a, idate on t begin
>   select raise(ABORT, 'You cannot update columns a or idate');
> end;
>
> create trigger t_upd_b after update of b on t begin
>   insert into audit_t
>   select old.a,
>          julianday(),
>          old.idate,
>          'b',
>          old.b,
>          new.b;
> end;
> create trigger t_upd_c after update of c on t begin
>   insert into audit_t
>   select old.a,
>          julianday(),
>          old.idate,
>          'c',
>          old.c,
>          new.c;
> end;
> create trigger t_upd_d after update of d on t begin
>   insert into audit_t
>   select old.a,
>          julianday(),
>          old.idate,
>          'd',
>          old.d,
>          new.d;
> end;
> create trigger t_upd_e after update of e on t begin
>   insert into audit_t
>   select old.a,
>          julianday(),
>          old.idate,
>          'e',
>          old.e,
>          new.e;
> end;
>
>
> insert into t (a, b, c, d, e, idate) values ('p001', 1, 2, 'n', 4,
> '2019-02-11');
> insert into t (a, b, c, d, e, idate) values ('p002', 2, 2, 'n', 4,
> '2019-02-11');
> insert into t (a, b, c, d, e, idate) values ('p003', 3, 2, 'n', 4,
> '2019-02-11');
> insert into t (a, b, c, d, e, idate) values ('p004', 4, 2, 'y', 4,
> '2019-02-11');
> insert into t (a, b, c, d, e, idate) values ('p005', 5, 2, 'y', 4,
> '2019-02-11');
> insert into t (a, b, c, d, e, idate) values ('p001', 10, 2, 'n', 4,
> '2019-02-12');
> insert into t (a, b, c, d, e, idate) values ('p002', 2, 4, 'n', 4,
> '2019-02-12');
> insert into t (a, b, c, d, e, idate) values ('p003', 3, 2, 'y', 4,
> '2019-02-12');
> insert into t (a, b, c, d, e, idate) values ('p004', 4, 2, 'y', 4,
> '2019-02-12');
> insert into t (a, b, c, d, e, idate) values ('p005', 5, 2, 'y', 4,
> '2019-02-12');
> insert into t (a, b, c, d, e, idate) values ('p001', 10, 2, 'n', 4,
> '2019-02-13');
> insert into t (a, b, c, d, e, idate) values ('p002', 2, 4, 'n', 4,
> '2019-02-13');
> insert into t (a, b, c, d, e, idate) values ('p003', 3, 2, 'y', 4,
> '2019-02-13');
> insert into t (a, b, c, d, e, idate) values ('p004', 5, 3, 'n', 4,
> '2019-02-13');
> insert into t (a, b, c, d, e, idate) values ('p005', 5, 3, 'y', 8,
> '2019-02-13');
>
> select * from audit_t;
> a           changed           idate       variable    oldv        newv
> ---------- ---------------- ---------- ---------- ---------- ----------
> p001        2458863.19728274  2019-02-12  b           1           10
> p002        2458863.19728274  2019-02-12  c           2           4
> p003        2458863.19728275  2019-02-12  d           n           y
> p004        2458863.19728282  2019-02-13  b           4           5
> p004        2458863.19728282  2019-02-13  c           2           3
> p004        2458863.19728282  2019-02-13  d           y           n
> p005        2458863.19728284  2019-02-13  c           2           3
> p005        2458863.19728284  2019-02-13  e           4           8
>
> update t set b=32 where a='p002' and idate=='2019-02-12';
>
> select * from audit_t;
> a           changed           idate       variable    oldv        newv
> ---------- ---------------- ---------- ---------- ---------- ----------
> p001        2458863.19728274  2019-02-12  b           1           10
> p002        2458863.19728274  2019-02-12  c           2           4
> p003        2458863.19728275  2019-02-12  d           n           y
> p004        2458863.19728282  2019-02-13  b           4           5
> p004        2458863.19728282  2019-02-13  c           2           3
> p004        2458863.19728282  2019-02-13  d           y           n
> p005        2458863.19728284  2019-02-13  c           2           3
> p005        2458863.19728284  2019-02-13  e           4           8
> p002        2458863.19728295  2019-02-12  b           2           32

Wow! Thanks Keith.  I will have to study these and understand them before 
getting into it.  Thanks again.

josé
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to