收藏 分享(赏)

oracle的触发器.doc

上传人:依依 文档编号:1208236 上传时间:2018-06-18 格式:DOC 页数:13 大小:19.63MB
下载 相关 举报
oracle的触发器.doc_第1页
第1页 / 共13页
oracle的触发器.doc_第2页
第2页 / 共13页
oracle的触发器.doc_第3页
第3页 / 共13页
oracle的触发器.doc_第4页
第4页 / 共13页
oracle的触发器.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

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营业执照举报