Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Update trigger, detecting missing columns
Michel Cadot schrieb:
> "DA Morgan" <damorgan_at_psoug.org> a écrit dans le message de news: 1135185379.283905_at_jetspin.drizzle.com...
> |
> |
> |
> |
> |
> |
> |
> |
> |
> |
> |
> |
> > The issue is the following one: > - if B is given in the set clause then set B to this new value > - if B is not given is the set clause then clear B (for instance). > > Now the example: > create table zz (a number primary key, b number, c number); > insert into zz values(2,1000,0); > > update zz set c=1, b=1000 where a=2; > select a,b,c from zz where a=2; > --> there row must be 2,1000,1 > > update zz set c=1 where a=2; > select a,b,c from zz where a=2; > --> there row must be 2,0,1 > > I don't see how to write a trigger that can handle that as in both cases :old.B=:new.B=1000. > > Regards > Michel Cadot > > > >
SQL> CREATE TABLE ZZ (A NUMBER PRIMARY KEY, B NUMBER, C NUMBER); Table created.
SQL> INSERT INTO ZZ VALUES(2,1000,0); 1 row created.
SQL> CREATE OR REPLACE PACKAGE b
2 IS
3 upd_flag PLS_INTEGER := 0;
4 END;
5 /
Package created.
SQL> CREATE OR REPLACE TRIGGER trg_before_row
2 BEFORE UPDATE ON zz
3 for EACH ROW
4 BEGIN
5 IF b.upd_flag = 0 THEN
6 :NEW.b := 0;
7 END IF;
8 b.upd_flag := 0;
9 END;
10 /
Trigger created.
SQL> CREATE OR REPLACE TRIGGER trg_before_stmt
2 BEFORE UPDATE OF B ON zz
3 BEGIN
4 b.upd_flag := 1;
5 END;
6 /
Trigger created.
SQL> UPDATE ZZ SET C=1, B=1000 WHERE A=2; 1 row updated.
SQL> SELECT A,B,C FROM ZZ WHERE A=2;
A B C
---------- ---------- ----------
2 1000 1
SQL> UPDATE ZZ SET C=1 WHERE A=2; 1 row updated.
SQL> SELECT A,B,C FROM ZZ WHERE A=2;
A B C
---------- ---------- ----------
2 0 1
SQL> Best regards
Maxim Received on Thu Dec 22 2005 - 05:06:51 CST
![]() |
![]() |