ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:19.63MB ,
资源ID:1208236      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-1208236.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(oracle的触发器.doc)为本站会员(依依)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

oracle的触发器.doc

1、oracle 的触发器问题引入:触发器示意图过程数据对象当用户登录或者退出或者操作了某个数据对象或者是 ddl(建表,建view)引起某个存储过程的值,我们把这个隐含的调用过程,称为触发器触发器的分类:dml(数据操作语言 insert,delete,update)触发器ddl(create tablecreate view createdrop)触发器系统触发器(与系统相关的触发器,比如用户登录,退出,启动数据库,关闭数据库)创建触发器的语法:触发器快速入门案例 1:在某一张表(my_emp)添加一条数据的时候,提示添加了一条数据-触 发 器快速入 门 :在某一 张 表( my_emp)添加

2、一条数据的 时 候,提示 添加了一条数据 -1、创 建一 张 表create table my_emp(id number,name varchar2(32);-2、创 建一个触 发 器create or replace trigger tri1after insert onscott.my_empbegindbms_output.put_line(添加一条记录);end;/触发器快速入门案例 2:在某张表(my_emp)修改多条数据的时候,提示 多次修改了数据= 讲解行级触发器和语句级触发器-触 发 器快速入 门 案例 2:在某 张 表( my_emp)修改多条数据的 时 候,提示 多次 修

3、改了数据 =讲 解行 级 触 发 器和 语 句 级 触 发 器create or replace trigger tri2after update onscott.empfor each row -表示一个行 级 触 发 器begindbms_output.put_line(修改了一条数据);end;dml 触发器:案例要求;为了进制工作人员在休息日改变员工信息,开发人员可以建立 before 语句触发器从而实现数据的安全。-案例要求 ;为 了 进 制工作人 员 在休息日改 变员 工信息,开 发 人 员 可以建立 before 语 句触 发器从而 实现 数据的安全。create or repl

4、ace trigger tri2before delete onscott.empbegin if to_char(sysdate,day) in (星期四 ,星期六) then dbms_output.put_line(对不起,休息日不能删除员工);RAISE_APPLICATION_ERROR(-20001,对不起,休息日不能删除员工);end if;end;/特别说明: RAISE_APPLICATION_ERROR 这个过程是 oracle 提供的,可以传入两个参数,第一个是自定义的错误参数号(-20000 -20999)之间,第二个参数是提示一个信息。使用条件谓词使用条件谓词来精确提

5、示用户的操作:案例:为了禁止工作人员在休息日改变员工信息,开发人员可以建立 before 语句触发器从而实现数据的安全。在输出提示时。明确提示用户是进行何种操作:insert,delete ,update-案例: 为 了禁止工作人 员 在休息日改 变员 工信息,开 发 人 员 可以建立 before 语 句触 发 器从而 实现 数据的安全。在 输 出提示 时 。明确提示用 户 是 进 行何种操作: insert,delete,updatecreate or replace trigger tri3beforeinsert or delete or update onscott.empbegin

6、casewhen inserting thendbms_output.put_line(请不要添加);raise_application_error(-20002,请不要添加);when updating then dbms_output.put_line(请不要修改);raise_application_error(-20003,请不要修改);when deleting thendbms_output.put_line(请不要删除);raise_application_error(-20004,请不要删除);end case;end;/使用:okd 和:new快速入门案例:(1)在修改 em

7、p 表雇员薪水的时候,显示雇员工资修改前和修改后的值(2)如何确保在修改员工工资不能低于原有工资-快速入 门 案例:( 1)在修改 emp 表雇 员 薪水的 时 候, 显 示雇 员 工 资 修改前和修改后的 值-(2)如何确保在修改 员 工工 资 不能低于原有工 资create or replace trigger tri4before update onscott.empfor each rowbeginif :new.sal:old.sal*1.2) thendbms_output.put_line(工资范围不对);-阻止 执 行raise_application_error(-20010

8、,工资范围不对);end if;end;/案例:编写一个触发器,阻止小于 18 岁的用户增加到数据库 emp 表中-案例: 编 写一个触 发 器,阻止小于 18 岁 的用 户 增加到数据 库 emp 表中-创 建一 张 表, 该 表有一个字段 birthdaycreate table emp2(id number primary key,name varchar2(32),birthday date);-创 建触 发 器create or replace trigger tri6before insert onscott.emp2for each rowbeginif add_months(:

9、new.birthday,18*12)sysdate thendbms_output.put_line(你年龄小);-阻止raise_application_error(-20011,你年龄小);end if;end;/思考:有一张学生表 students 表【id ,name,classId】,班 级表 class 表【id,name,nums】系统触发器:系统触发器主要是针对 oracle 事件的触发器,比如用户登录( logon logoff)数据库的启动或者关闭(startup startdown ) ,一般是由系统管理员来完成的。基本语法:create or replace trig

10、ger 触发器名afterbefore lononlogoff on databasebegin-执行语句end;用于案例:编写能够完成登录(logon )和退出(logoff )触发器-用于案例: 编 写能 够 完成登 录 (logon)和退出( logoff)触 发 器-1、创 建一 张 表,用于保存用 户 登 录 或者退出的情况;create table log_table(username varchar2(20),logon_time date,logoff_time date,address varchar2(20);-创 建触 发 器-1、登 录 触 发 器create or r

11、eplace trigger tri7after logon on databasebegininsert into log_table (username,logon_time,address) values(ora_login_user,sysdate,ora_client_ip_address);end;/-2、退出触 发 器create or replace trigger tri8before logoff on databasebegininsert into log_table (username,logoff_time,address) values(ora_login_use

12、r,sysdate,ora_client_ip_address);end;/ddl 触发器:主要的用途是,记录在 oracle 中,发生的 ddl 操作,一般是由系统管理员来完成的。基本语法:create or replace 触发器名after ddl on 方案名 .schema -比如:scott.schemabegin-执行语句end;快速入门案例:编写一个触发器,可以记录某个用户进行的 ddl 操作-快速入 门 案例: 编 写一个触 发 器,可以 记录 某个用 户进 行的 ddl 操作-步 骤1、创建一张表create table my_ddl_record(event varcha

13、r2(64),username varchar2(64),ddl_time date);2、创建触发器create or replace trigger tri9after ddl on scott.schemabegininsert into my_ddl_record values(ora_sysevent,ora_login_user,sysdate);end;/特别强调:在 oracle 中 dml 语句需要手动提交(如果没有手动提交,当你退出控制台的时候,oracle 会自动提交),ddl 语句自动提交。管理触发器:(1)禁用触发器:alter trigger 触发器名 disabl

14、e;(2)激活触发器:alter trigger 触发器名 enable;(3)禁用或者激活一张表所有蹭饭夫妻:alter table 表名 enable all trigger;(9i)alter table 表名 disable all trigger;(9i)(4)删除触发器:drop trigger 触发器名;特别注意:触发器是针对所有客户端的操作,比如 plsql,sqlplus,Java 等等,只要满足了触发器的条件,均会触发相应的触发器oracle 例外处理:基本语法:begin-执行语句exception-异常捕获when 例外名称 then -执行语句when 例外名称 th

15、en-执行语句when others then-其他执行语句end;案例:编写一个过程,可以接收雇员的编号,并显示该雇员的姓名,如果雇员不存在就会有异常。-案例: 编 写一个 过 程,可以接收雇 员 的 编 号,并 显 示 该 雇 员 的姓名,如果雇 员 不存在就会有异常。create or replace procedure pro1(v_in_empno number) isv_ename emp.ename%type;begin select ename into v_ename from emp where empno=v_in_empno;dbms_output.put_line(雇员名字是:|v_ename);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报