欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle:触发器的定义、类型及创建语法等讲解

程序员文章站 2022-07-02 13:34:52
一、定义:触发器是一个与表相关联的,存储plsql程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,oracle自动地执行触发器中定义的语句序列。 二、...

一、定义:触发器是一个与表相关联的,存储plsql程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,oracle自动地执行触发器中定义的语句序列。

二、触发器类型:

1、语句级触发器:在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。

2、行级触发器:出发语句作用的每一条记录都被触发,在行级触发器中使用:old和:new伪记录变量,识别状态。

三、创建语法:

create [or rerlace] trigger 触发器名

{before|after}

{insert|delete| --语句级

update of 列名} --行级

on 表名

[for each row]

plsql块【declare...begin...end;/】

四、删除触发器语法:drop trigger 触发器名;

五、触发器语句与伪记录变量的值:

触发语句 :old :new
insert 所有字段都是空(null) 将要插入的数据
update 更新以前该行的值 更新后行的值
delete 删除以前该行的值 所有字段都是空(null)

例:创建语句级触发器test,当对emp表进行增加操作之前,显示“aaa”

create or replace trigger test

before

insert

on emp

begin

droms_output.put_line('aaa');

end;

/例:创建语句级触发器test,当对emp表进行删除操作之后,显示“aaa”

create or replace trigger test

after

delete

on emp

begin

droms_output.put_line('aaa');

end;

/例:星期一到星期五,且7-23点能向数据库emp表插入数据,否则抛出异常

create or replace trigger test

before

insert

on emp

declare

pday varcher2(10);

phour number(2);

begin

--获取星期

select to_char(sysdate,'day') into pday from dual;

--获取时间

select to_char(sysdate,'hh24') into phour from dual;

if pday in('星期六','星期日') or phour not between 7 and 23 then

raise_application_error('111','不能插入');

end if;

end;

/例:创建行级触发器test,涨工资这一列确保大于涨前工资

create or replace trigger test

after

update of sal

on emp

for each row

declare

if :new.sal <=:old.sal then

--抛例外

raise_application_error('111','例外');

end if;

end;

/最后,实践表明:删除触发器,表还在;将表放入回收站,触发器依然正常工作,但若表彻底删除了,原来的触发器也就被删除了。