创建一个触发器,当表a中某条数据被更改时,将此条修改记录插入到另一张表中,求如何实现???

时间:2022-11-13 00:48:15
创建一个触发器,当表a中某条数据被更改时,将此条修改记录插入到另一张表中,求如何实现???

6 个解决方案

#1


建议参照oracle语法去实现,只有这样才能提高自己的能力和水平。

#2


就是用oracle如何实现呢?

#3



SQL> 
SQL> create table test(id int , name varchar(10));
Table created
SQL> create table test_bak(id int , name varchar(10));
Table created
SQL> create trigger test_up
  2  before update on test
  3  for each row
  4  begin
  5      insert into test_bak(id , name)values(:old.id , :old.name);
  6  end ;
  7  /
Trigger created
SQL> begin
  2      insert into test(id,name) values(1,'lisi');
  3      insert into test(id,name) values(2,'zhang');
  4      commit ;
  5  end;
  6  /
PL/SQL procedure successfully completed
SQL> update test set name = 'zhangsan' where id = 2 ;
1 row updated
SQL> select * from test ;
                                     ID NAME
--------------------------------------- ----------
                                      1 lisi
                                      2 zhangsan
SQL> select * from test_bak ;
                                     ID NAME
--------------------------------------- ----------
                                      2 zhang
SQL> drop table test purge ;
Table dropped
SQL> drop table test_bak purge ;
Table dropped

SQL> 

#4


非常谢谢,那如果test_bak中再增加一个字段modify_time来记录表test每次数据修改的时间应该怎么做呢

#5


人家SQL都给你写出来了。。
增加个时间你就在建表的时候增加个时间字段
触发器里再把当前时间插入进去就OK了
create table test_bak(id int , name varchar(10),mod_date date);

insert into test_bak(id , name)values(:old.id , :old.name,  sysdate);

#6


非常感谢 之前是表受其他约束了

#1


建议参照oracle语法去实现,只有这样才能提高自己的能力和水平。

#2


就是用oracle如何实现呢?

#3



SQL> 
SQL> create table test(id int , name varchar(10));
Table created
SQL> create table test_bak(id int , name varchar(10));
Table created
SQL> create trigger test_up
  2  before update on test
  3  for each row
  4  begin
  5      insert into test_bak(id , name)values(:old.id , :old.name);
  6  end ;
  7  /
Trigger created
SQL> begin
  2      insert into test(id,name) values(1,'lisi');
  3      insert into test(id,name) values(2,'zhang');
  4      commit ;
  5  end;
  6  /
PL/SQL procedure successfully completed
SQL> update test set name = 'zhangsan' where id = 2 ;
1 row updated
SQL> select * from test ;
                                     ID NAME
--------------------------------------- ----------
                                      1 lisi
                                      2 zhangsan
SQL> select * from test_bak ;
                                     ID NAME
--------------------------------------- ----------
                                      2 zhang
SQL> drop table test purge ;
Table dropped
SQL> drop table test_bak purge ;
Table dropped

SQL> 

#4


非常谢谢,那如果test_bak中再增加一个字段modify_time来记录表test每次数据修改的时间应该怎么做呢

#5


人家SQL都给你写出来了。。
增加个时间你就在建表的时候增加个时间字段
触发器里再把当前时间插入进去就OK了
create table test_bak(id int , name varchar(10),mod_date date);

insert into test_bak(id , name)values(:old.id , :old.name,  sysdate);

#6


非常感谢 之前是表受其他约束了