分享
 
 
 

oracle文档第九章触发器(1)

王朝学院·作者佚名  2009-11-18
窄屏简体版  字體: |||超大  

第九章节 :触发器编码

触发器是存储在数据库存中隐式的运行或者被触发的一段程序,当某些事件发生。通常情况下,触发器中支持可执行的一段pl/sql代码块,当一个insert,update,或者delete命名发生在一个表或者视图上的时候。其也支持系统和数据库或者方案事件.oracle数据库也支持触发器中含有可执行的pl/sql或java程序.

该章节讨论dml触发器,instead of 触发器和系统触发器(数据库/方案触发器),内容如下:

设计触发器

创建触发器

触发器核心代码

编译触发器

修改已有的触发器

(enabling and disabling triggers)使用和[disabling]角发器

查看触发器相关的信息

触发器实例代码

用触发器响应[responding]系统事件

9.1设计触发器

在设计触发器时,使用下列设计原则

触发器用来保证当一个特定的操作被执行时,和该操作相关的动作也被执行。

当一个重复[duplicate]功能在数据库中存在,此时要避免使用触发器。例如,如果能用数据完敕性约束来实现维不合法的数据存储到数据库时,就没有必要使用触发器来实现相同的功能。[refect]拒绝

限制触发器程序代码的大小,如果触发器的实现逻辑需要超过60行代码,那么最好把大量的代码存储在一个存储过程中,然后在触发器中调用该存储过程。

regardless of[无论] 无论是用户或者数据库[issues]触发器事件,触发器是仅仅用来[centralized]集中公共的操作被调用。

不要创建[recursive]递归性的触发器。如,创建一个在Emp_tab after update语名的触发器,在该表中又定义了一个update 语句,使该触发器递补归的被调用直到内存溢出。

要明知[judiciously]的用触发器,它在每个用户,任何时间被执行,当事件发生在已经定义好的触发器上.

9.2创建触发器

可以使用任何[interactive]互相交互的工具,如sql*plus 或enterprise manager,用CREATE TRIGGER statement命令来创建.在使用交互工具编写完触发器时,在程序末尾加上('/')字符是[necessary]必要的,来使刚创建的触发器激活[activate]。

如下命令在emp_tab表上创建一个触发器:

CREATE OR REPLACE TRIGGER Print_salary_changes

BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab

FOR EACH ROW

WHEN (new.Empno > 0)

DECLARE

sal_diff number;

BEGIN

sal_diff := :new.sal - :old.sal;

dbms_output.put('Old salary: ' || :old.sal);

dbms_output.put(' New salary: ' || :new.sal);

dbms_output.put_line(' Difference ' || sal_diff);

END;

/

当dml操作(insert,update,delete 命令)在该表上时,该触发器被触发,你可以选择组合方式触发事件来触发它。

因为该触发器用了BEFOR关键字,它能在新值存储表之间可以访问新值或如果新值被表示有简单的错误时,还能修改新值。

如果你想让触发器查询或修改同样表的数据时,可以用AFTER关键字。because triggers can only do that after the initial changes are applied and the table is back in a consistent state.

因为该触发器用了FOR EACH ROW 从句,这可以被执行多次,如当更新或删除多个行时.如你仅仅想记录发生操作的the face,就可以[omit] 省略for each row关键字,但是不使用该数据为每行记录.

一但,触发器被创建,输入下面sql命令

UPDATE Emp_tab SET sal = sal + 500.00 WHERE deptno = 10;当该触发器一但被触发,每行被更新,在打印从句,打印新的薪水,以前薪水,和它们之间的不同.如果在pl/sql块中存在任何错误,create(或create或replace)命令执行失败. 注:触发器程序代码的大小不能超过32kb;

下面部分使用实例来[illustrate]说明触发器部分使用方法

看其它:

"Examples of Trigger Applications" for more realistic examples of CREATE TRIGGER statements

9.2.1 触发器类型

触发器可以包含pl/sql块,或一个pl/sql,c或java程序和表,视图,方案或数据库自身关联.

当一个特殊事件发生,Oracle数据自动执行触发器,[ which may be in the form of a system event or a DML statement being issued against the table.]

触发器作用对象:

l Dml触发器作用在表

l Instead of 触发器可以作用在视图

l System 触发器作用在数据库/方案.用database,触发器触发每个事件为所有用户,用Schem,触发器被特定的用户触发

See also:

Oracle Database SQL Reference for information on trigger creation syntax

9.2.2 系统事件

你可以创建下列任何事件来触发的触发器

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有