- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
oracle触发器使用
触发器
触发器事件
种类 关键字 含义 DML事件(3种) INSERT 在表或视图中插入数据时触发 UPDATE 修改表或视图中的数据时触发 DELETE 在删除表或视图中的数据时触发 DDL事件(3种) CREATE 在创建新对象时触发 ALTER 修改数据库或数据库对象时触发 DROP 删除对象时触发 数据库事件(5种) STARTUP 数据打开时触发 SHUTDOWN 在使用NORMAL或IMMEDIE选项关闭数据库时触发 LOGON 当用户连接到数据库,建立会话时触发 LOGOFF 当一个会话从数据库中断开时触发 SERVERERROR 发生服务器错误时触发
表9-2 触发器种类
种类 作用 DML触发器 创建在表上,由DML事件引发的触发器 替代触发器 创建在视图上,用来替换对视图进行的插入、删除和修改操作 DDL触发器 定义在模式上,触发事件是数据库对象的创建和修改 数据库事件触发器 定义在整个数据库或模式上,触发事件是数据库事件 DML触发器
CREATE [OR REPLACE] TRIGGER 触发器名
{BEFORE|AFTER|INSTEAD OF} 触发事件1 [OR 触发事件2…]
ON 表名
WHEN 触发条件
[FOR EACH ROW]
DECLARE
声明部分
BEGIN
主体部分
END;
其中:
BEFORE表示先执行触发器代码,然后执行触发语句。AFTER正好相反。
INSTEAD OF表示不执行触发语句,只执行触发器代码。INSTEAD OF触发器只能建在视图上。
WHEN 触发条件,表示当该条件满足时,触发器才能执行
FOR EACH ROW表示触发器为行级触发器,省略则为语句级触发器。
行级触发器表示触发的SQL语句影响的每一行都要触发一次,语句级触发器表示触发的SQL语句只触发一次触发器代码。
例1:创建行级触发器,当对表EMP作删除和更新操作时,显示信息“对EMP表操作成功!”。
CREATE OR REPLACE TRIGGER DML_TRI
BEFORE --触发器在触发语句前执行
DELETE OR UPDATE -- 由种事件触发
ON
FOR EACH ROW -- 行级触发器
BEGIN
END;
测试:CLERK职位的工资增加100
set serveroutput on
update emp set sal=sal+100 where job= CLERK;
COMMIT;
注意:由于更新会影响三条记录,行级触发器将触发三次
实例改造:把上例修改为语句级触发器。
测试:CLERK职位的工资增加200
可以看到,触发器只执行一次。
练习:创建语句级触发器,当对表dept进行插入操作时,自动显示“记录已经插入”的信息。
实例改造:修改例1的触发器,当修改EMP表的工资时并且修改后的工资比原来多300时,触发器才触发。
CREATE OR REPLACE TRIGGER DML_TRI
BEFORE
UPDATE of sal --触发事件改为修改SAL字段
ON emp
For each row
When (new.sal-old.sal300) --触发条件
BEGIN
DBMS_OUTPUT.PUT_LINE(对EMP表操作成功!);
END;
注意:在行级触发器中,用:new 和:old(称为伪记录),来访问数据变更前后的值。但要注意,INSERT语句插入一条新记录,所以没有:old记录,而DELETE语句删除掉一条已经存在的记录,所以没有:new记录。UPDATE语句既有:old记录,也有:new记录,分别代表修改前后的记录。引用具体的某一列的值的方法是: :old.字段名,或:new.字段名
在WHEN条件中引用new和old不需要加冒号:
测试:给SCOTT工资增加200,触发器没有触发。
给SCOTT工资增加400,触发器触发了。
【训练3】创建触发器CHECK_SAL,对职务为CLERK的雇员的工资修改,当修改的工资超出500至2000范围时,不能进行修改。
步骤1:创建和编译以下触发器:
CREATE OR REPLACE TRIGGER CHECK_SAL
BEFORE
UPDATE
ON emp
FOR EACH ROW
BEGIN
IF :old.job=CLERK AND (:new.sal500 OR :new.sal2000) THEN
RAISE_APPLICATION_ERROR(-20001, 工资修改超出范围!);
END IF;
E
您可能关注的文档
最近下载
- 英语课程标准研究与教材分析(第2版)课件全套 第1--9章 英语课程标准和英语课程的基本概念 ---英语教材难度分析.pptx
- 《移动通信技术》课件——1主题一 发展历程-----移动通信的前世今生.pptx VIP
- 2024年锅炉操作工(初级)专业技能考试题库附答案(真题版) .pdf VIP
- 1000亩四季采摘水果园建设可行性研究报告.pdf VIP
- 河北省工伤职工停工留薪期分类目录.xls VIP
- 做外贸必读:外老们都是如何采购的——厦门区域兰彦晖分享.doc VIP
- (2020版新教材)闽教版五年级上册信息技术全册课件.pptx VIP
- (2025年)科创板试题及答案.docx VIP
- 第113届广交会跨国采购清单概览.pdf VIP
- Vendler 1957 verbs and times英文版本.pdf VIP
文档评论(0)