触发器的设计
分类:
行级触发器;语句触发器
、、触发器不接受参数。
2.事务:删除事务可以使用回滚来恢复一下。
原子性(atomicity)
一致性() 只有commit后,才会保证不同用户看到的数据是一致的。
隔离型
永久性
Createor replace trigger del_deptid
Afterdelete on dept
Foreach row
Begin
Deletefrom emp where deptno=:old.deptno
End;
//
Createor replace trigger insert_dept
Afterinsert on dept
Foreach row
Begin
Insertinto emp(empno) values(:new.deptno);
End;
Createor replace trigger update_dept
Afterupdate on dept
Foreach row
Begin
Updateemp set empno=:new.deptnowhere empno=:old.deptno
End;
//
禁止数据修改:
Createor replace trigger book_delete
Afterdelete on books
Begin
If:old.books_id=’0001’then
Raise_application_error(-20000,’不允许删除!’);
Endif;
End;
//在触发器中,不允许使用rollback
3.语句触发器
createor replace trigger dml_aa
afterinsert or delete or update on scott.emp
begin
ifinserting then
insertinto mylog values(user,sysdate,'I');
elsifdeleting then
insertinto mylog values(user,sysdate,'D');
else
insertinto mylog values(user,sysdate,'U');
endif;
end;
/
createor replace trigger set_no
beforeinsert on auto
foreach row
declare
snnumber(5);
begin
selectmyseq.nextval into sn from dual;
:new.a:=sn;
end;
4. 替换触发器(只能健在视图上,用于补充视图不能更新两个表的缺陷)
createor replace trigger tr_test
insteadof insert on v_test
foreach row
begin
insertinto test(tno) values(:new.tno);
end;