触发器

发表时间:2017-05-11 16:57:25 浏览量( 18 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、什么是触发器

触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用。触发器的功能:

  • 自动生成数据

  • 自定义复杂的安全权限

  • 提供审计和日志记录

  • 启用复杂的业务逻辑

定义触发器的基本格式如下:

CREATE [OR REPLACE] TRIGGER trigger_name  

AFTER | BEFORE | INSTEAD OF

[INSERT] [[OR] UPDATE [OF column_list]]

[[OR] DELETE]

ON table_or_view_name

[REFERENCING {OLD [AS] old / NEW [AS] new}]

[FOR EACH ROW]

[WHEN (condition)]

触发器由三部分组成:

  • 触发器语句(事件),定义激活触发器的 DML 事件和 DDL 事件。

  • 触发器限制,执行触发器的条件,该条件必须为真才能激活触发器。

  • 触发器操作(主体),包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行。

示例:我们现在需要建立一张日志,记录每一个用户修改密码的信息,记录修改前的密码,修改后的密码。

(1)建立日志表,表主键要设置为自增。

 create table mangerlog
(
   mlog int primary key,
   mname varchar2(400),
   moldpass varchar2(400),
   mnewpass varchar2(400)
)

(2)定义触发器

create or replace trigger manager_trigger
----触发条件,更新了用户的密码时候触发
after update of passwd
on tb_manager
--记录伪记录,引用这个记录要在前面加个冒号:
referencing old as mold  new as mnew
--行级触发器
for each row
--条件
--when
--  mold.log_name like 'liu%'
declare
-- 定义局部变量
begin
  insert into MANGERLOG(MNAME,MOLDPASS,MNEWPASS) 
        values(:mold.login_name,'旧密码:'||:mold.passwd,'新记录'||:mnew.passwd);
end;

(3)测试,你可以更新一下用户的密码,看看日志表是否会自动记录。

  update tb_manager set passwd='678' where manager_id=1

二、操作触发器

如果我们暂时不需要这个触发器那么我们可以先禁用它,以后还可以重启启用,如果确定以后都不需要我们也可以直接删除它。示例如下:

SQL> ALTER TRIGGER aiu_itemfile DISABLE;     --禁用触发器

SQL> ALTER TRIGGER aiu_itemfile ENABLE;      --启用触发器

SQL> ALTER TRIGGER aiu_itemfile ENABLE;      --启用触发器