你在update了emp表之后,触发了触发器,然后在触发器的程序块中,又再次update了emp_back表,所以这两个表就产生了联系
你的in兩邊沒有隔開吧
create table emp1 select * from emp where 1=2; create or replace trigger tri_operation_dml after insert or delete or update on emp for each row begin insert into emp1(ename) select case when :old.ename is null then :new.ename else :old.ename end from dual; end;
set serveroutput on
create or replace trigger xxx
before
update
on emp
for each row
begin
update backups set sal=:new.sal where empno=:new.empno;
dbms_output.put_line('成功备份:'||:new.empno||'的工资'||:new.sal||'元');
end;
/
update emp set sal=sal+10;
commit;
select * from emp;
select * from backups;
成功备份:7369的工资1549.88元
成功备份:7499的工资2949.95元
成功备份:7521的工资2511.49元
成功备份:7566的工资5629.44元
成功备份:7654的工资2511.49元
成功备份:7698的工资5385.86元
成功备份:7782的工资4606.37元
成功备份:7839的工资9575.59元
成功备份:7844的工资3047.4元
成功备份:7900的工资1868.42元
成功备份:7902的工资5678.15元
成功备份:7934的工资2618.66元
成功备份:8000的工资1546.88元
可以通过跑服务,数据同步到物化视图中,物化视图会比dblink快
触发器创建后只要你不删除是会存在的,但是你可以自己控制它是否起作用。如:
ALTER TRIGGER trigger_name DISABLE; -- 失效,生效改为enable
ALTER TABLE table_name DISABLE ALL TRIGGERS; -- 批量失效,批量生效改为enable
ALTER TRIGGER trigger_name COMPILE; -- 重新编译trigger
DROP TRIGGER trigger_name; -- 删除trigger
能调用,
添加开除时间和开除人比较好实现,sql语句就行了。现在是想想你的触发条件,员工被开除是哪个表受影响,是否符合触发器的触发条件。