日期:2014-05-16 浏览次数:20429 次
一.什么是触发器
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
?
1.触发器的功能:
二.创建触发器
1.基本语法结构
Create [or replace] trigger [模式.]触发器名 before| after insert|delete|(update of 列名) On 表名 [for each row] When 条件 PL/SQL块
举例
create trigger student_triger before insert or delete or update of student_id on TAN.student for each row begin if inserting then dbms_output.put_line('insert trigger is chufa le .....'); end if; if updating then dbms_output.put_line('update trigger is chufa le .....'); end if; if deleting then dbms_output.put_line('delete trigger is chufa le .....'); end if; end;
??
create trigger student_triger
?
before insert or delete or update of student_id on TAN.student
for each row
if inserting then dbms_output.put_line('insert trigger is chufa le .....'); end if;
?
if updating then dbms_output.put_line('update trigger is chufa le .....'); end if;
?
if deleting then dbms_output.put_line('delete trigger is chufa le .....'); end if;
?
三.触发器的分类
1.DML触发器
?? DML触发器是对表进行insert,update,delete操作时激发的,上面的例子就是典型的DML触发器
?
2.INSTEAD OF触发器
????? 在简单视图上往往可以执行INSERT、UPDATE和DELETE操作,但是在复杂视图上执行INSERT、 UPDATE和DELETE操作是有限的。如果视图子查询包含有集合操作符、分组函数、DISTINCT关键字或者连接查询,那么将禁止在该视图上执行 DML操作。为了在这些复杂视图上执行操作,需要建立INSTEAD-OF触发器。
?
?? INSTEAD OF 触发器的限制:
create or replace trigger tr_instead_of_stu_view instead of insert on stu_view for each row begin // sql 复杂的逻辑操作 end;
?
3.系统事件触发器
???? oracle的系统事件触发器:系统事件触发器是指基于oracle系统事件(如logon和startup)所建立的触发器。通过这种触发器可以跟踪系统或数据库的变化。
?
首先建立LOG表
createtable triger_log_table(
username varchar2(20),
log_time date,
onoff varchar(6),
address varchar2(30));
其次建立触发器
createtrigger tr_logon
after logon ondatabase
begin
insertinto triger_log_table values (ora_login_user,sysdate,'logon',ora_client_i p_address);
end;
//当用户登录数据库后时,将有关信息写入创建的log表中
createtrigger tr_logoff
before logoff ondatabase
begin
insertinto triger_log_table values(ora_login_user,sysdate,'