我不懂oracle中的触发器,请各位帮忙

如题所述

触发器可以分为DML触发器,替代触发器,系统触发器。论起种类可以分为行级触发器和语句级触发器。
1.DML触发器
DML触发器的创建格式为
create or replace trigger 触发器名
[before/after] 操作 on 表名
[for each row]-------行级触发器的定义
when 条件------------注意加括号
begin
语句体,一般为raise_application_error(-20500,提示语句);
end;
还是就是关于old与new,old是指原来的(主要用于update),new是指要插入或者更新的,比方说以update为例子,我们要更新某一员工的工资,
那么原来的sal就是old去表示,而新的就是update里的工资就是new。以下两个例子供参考:
create or replace trigger guo_trigger----创建触发器
before update on empback ----指明触发器时机
for each row ----行触发器标识
when (new.sal<old.sal ) ----触发条件
begin
raise_application_error(-20500,'不能给员工减少工资');
end;

例子二:
create or replace trigger guo_trigger
before insert or update on empback
for each row
when (new.job not in ('MANAGER','CLERK') OR NEW.SAL>2000)
BEGIN
RAISE_APPLICATION_ERROR(-20500,'对不起,这不行');
END;
2.替代触发器
替代触发器主要是针对视图进行的操作。
替代触发器创建格式:
create or replace trigger 触发器名
instead of [delete or insert or update] On 视图名
[for each row] ------行触发器条件
begin
具体语句。注意这里有触发器谓词的使用,具体如下:updating,inserting,deleting
end;

以下是例子:
create or replace trigger guolei_trigger
instead of update or delete on guolei_view
begin

if updating then-------------------------注意这里的deleteing以及下面的updating。。
update empback set sal=:new.sal where empno=:new.empno;

end if;
if deleting then

delete from empback where empno=:new.empno;
end if;
end;
3.系统触发器
系统触发器又可以分为两种:用户触发事件和系统触发事件
用户触发事件包括用户使用create alter delete等命令以及登陆或者退出数据库连接。

更多内容,参见我的博客http://greenyouyou.blog.163.com/blog/static/13838814720110183428454/
温馨提示:答案为网友推荐,仅供参考
相似回答