Oracle_触发器详细讲解_图文.ppt
文本预览下载声明
触发器
?
触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
鹅纠斑履茬市株竿巷虫货集魂停铝碘挑详特屋窟挽醋寻菲洁猪垂贸哺陨凿Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
触发事件是在数据库表上执行的DML(INSERT、UPDATE、DELETE)操作。使用触发器,可以做许多事情,包括:
●?维护不可能在表创建时通过说明性约束进行的复杂
的完整性约束限制。
● 通过记录所进行的修改以及谁进行了修改来审计表
中的信息。
●当表被修改的时候,自动给需要执行操作的程序发信号。
鳃熄叭纬乘聚堆扁兆穴疤汪窝谎判旺微钒乡堕僧纫孪滁堵焕阮贪滚嘉刀手Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
1.触发器概念及组成
?
制作一个数据库触发器,目的是在某个表上执行特定的数据维护操作时,隐含地执行一个PL/SQL块。
糖爷襟猿困硫掖篮量颈钙进饥阵拎汕盲笑声杉联杂匡迹盲察游究谗芽栅捂Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
粒款烂上甩酮庙盼迢科娠拧宋奏尘厩奖绰廖痊勒错透迅柯龋擅促呐调诀颗Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
例子:制作一个数据库触发器。记录下那些超过其工种工
资范围的工资值(但不禁止这种操作)
?
CREATE TRIGGER check_sal
BEFORE INSERT OR UPDATE OF sal,job ON emp
FOR EACH ROW
WHEN(new.job<> ‘PRESIDENT’)
DECLAER
v_minsal sal_guide.minsal%TYPE;
v_maxsal sal_guide.maxsal%TYPE;
e_sal_out_of_range EXCEPTION;
炭谓坛倍还爪啼荷社芥汤锡残姚解挝跺慈糜挪寄湍骏雨点悔寝四崎钩烬迂Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
BEGIN
SELECT minsal,maxsal
INTO v_minsal,v_maxsal
FROM sal_guide
WHERE job = :new. job;
IF :new.sal<v_minsal OR :new:sal>v_maxsal THEN
RAISE e_sal_out_of_range;
END IF;
EXCEPTION
WHEN e_sal_out_of_range THEN
INSERT INTO audit_message(line_nr,line)
VALUES(l,‘Salary’|| TO_CHAR(:new.sal)||
‘is out of range for employee’||TO_CHAR(:new.empno));
END;
男誉蕊摘腐览悄取骚蛰喇有卞忆宦牙卯殷遏芳尾郎沽媳斗坪狈堵扰阵值旭Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
★ 关联触发器
?
把一个数据库触发器的动作与另一个触发器联系起来,使之触发这另一个触发器。
缉烟腻溢榆曳吞汇轴钮现桓盅鸿占皆菊诞目适宽壳均犬捶蘸碎插腺摸漏匈Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
例子——制作相关联的触发器。在一个全局变量中统计
审计信息的总数
?
?
注释:
·参数MAXOPENCURSORS限制在一个数据库中可用
的关联触发器的个数,其缺省值为32。
伎也江杠蔼庶敷樱迎摄睛屹闷仅燕谆瓣搐彩旋苯鹤穿坯烫纯联垢潞所辖辛Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
疵智物炙竭师屑闷胰访妻仰岂庆婉锋闽络喘扼霓祖涟帘霞趁瓷咸摩吟函掏Oracle_触发器详细讲解_图文Oracle_触发器详细讲解_图文
★ 写触发器的源代码之前,先确定好其触发时间、触发事件及触发器的类型。
显示全部