I have a table that has a bunch of columns, one of which is a ‘last_update_time’ column. Whenever I change the value of any of the other columns, I would like ‘last_update_time’ to automatically update to SYSDATE
.
I know that you would usually use triggers for this kind of thing, but as far as I am aware it is not possible to have a trigger for a table mutate that same table.
What is the best way of implementing the functionallity described above?
Advertisement
Answer
You can use a trigger before update of. You only need to specify the columns that might be updated in the clause before of
Take a look at this
x
SQL> create table testtrg ( c1 number, c2 date ) ;
Table created.
SQL> create or replace trigger mytrig
before update of c1
on testtrg
referencing new as new old as old
for each row
declare
begin
:new.c2 := sysdate;
end;
/ 2 3 4 5 6 7 8 9 10 11 12 13
Trigger created.
SQL> select * from testtrg;
no rows selected
SQL> insert into testtrg values ( 1 , sysdate - 360 );
1 row created.
SQL> commit;
Commit complete.
SQL> select * from testtrg ;
C1 C2
---------- ---------
1 28-JUL-19
SQL> update testtrg set c1=2 ;
1 row updated.
SQL> commit ;
Commit complete.
SQL> select * from testtrg ;
C1 C2
---------- ---------
2 22-JUL-20
SQL>