各位大虾好,有一个这样的问题不知道能不能用触发器实现,情况如下
我有两个表:legal、legal_history ,legal表中有好多数据会进行修改,现在我想通过触发器记录下所有的修改痕迹,比如说legal表中有条数据为A,改后这条数据变成了B,我需要把A记录后legal_history中,下次如果再改,由B变成C,那么legal_history表中记录下B这条记录,依此类推,了解到触发器的一些作用后,我想如果这种方法可以实现,那么比程序的效率将要快,个人认为,只是不知道我的想法触发器能不能满足,请各位高手指点,谢谢 数据库是oracle
我有两个表:legal、legal_history ,legal表中有好多数据会进行修改,现在我想通过触发器记录下所有的修改痕迹,比如说legal表中有条数据为A,改后这条数据变成了B,我需要把A记录后legal_history中,下次如果再改,由B变成C,那么legal_history表中记录下B这条记录,依此类推,了解到触发器的一些作用后,我想如果这种方法可以实现,那么比程序的效率将要快,个人认为,只是不知道我的想法触发器能不能满足,请各位高手指点,谢谢 数据库是oracle
解决方案 »
- 新手提问:一次无法得到时两个select结果?
- toad如何导出序列,触发器,存储过程
- 郁闷的问题: 连接 Oracle9i 错误: The Network Adapter could not establish the connection
- 怎样从oracle中读取blob数据
- 安装错误,急!在线等待。
- 特殊字符替换为空
- 在两个系统平台(UNIX,WINDOWS)上,都使用ORACLE数据,开发出的系统,代码不一样吗?
- 写这个函数我竟要1000行的代码,大家帮我想个简单的!
- 在WinXP上安装Oracle8i,根本没反应,为什么呀?
- 如何建立一个小数据库?
- 关于一个表in另一个表的项目个数问题
- 关于exist的用法,可以用不等的判断关系吗
create or replace trigger tr_legal_change
after update on legal
for each row
declare
begin
insert into legal_history
values(:old.a,:old.b,:old.c,sysdate);
end tr_legal_change;
示例代码:CREATE OR REPLACE TRIGGER TriggerUpdateLegeal
AFTER UPDATE ON legal
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO legal_history VALUES(:OLD.字段1, :OLD.字段2, ....);
END TriggerUpdateLegeal;
create table mm_test_triger(id number,name varchar2(20),timestamp date);
insert into mm_test_triger values(1,'123123',sysdate);
insert into mm_test_triger values(2,'123123',sysdate);
insert into mm_test_triger values(3,'123123',sysdate);
insert into mm_test_triger values(4,'123123',sysdate);
insert into mm_test_triger values(5,'123123',sysdate);
create table mm_test_triger_history(id number,name varchar2(20),timestamp date,state varchar2(2));create or replace trigger mm_test_triger
after update on mm_test_triger
for each row
declare
begin insert into mm_test_triger_history values(:OLD.id,:OLD.name,:OLD.timestamp); end mm_test_triger;
update mm_test_triger m set m.name = 'jkkjk' where m.id = 1;
然后报 oracle:04098:触发器‘SYSTEM.MM_TEST_TRIGER'无效且未通过验证在网上查啦,但是找不到具体的解决方案,怎么回事呢?我该如何做