触发器解(未打印).doc_第1页
触发器解(未打印).doc_第2页
触发器解(未打印).doc_第3页
触发器解(未打印).doc_第4页
触发器解(未打印).doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

触发器:1,提出问题:当用户登陆的时候,自动记录该用户的名字,时间和IP。当用户在星期天对某张表进行删除操作的时候,我们提示不能这样做当用户删除某条记录的时候,自动将记录保存到另外一张表去2,解决之道触发器触发器是指存放在数据库中,被隐含执行的存储过程,可以支持dml触发器,还支持基于系统时间(启动数据库,关闭数据库,登陆)和ddl操作建立触发器。3,触发器的分类:ddl(create table , create view , drop .)触发器dml(insert, delete, update)触发器系统触发器(与系统相关的触发器,比如用户登陆,退出,启动数据库,关闭数据库)4,触发器快速入门:在某张表上添加一条数据,提示“添加了一条记录”A:创建一张表Create table my_emp(id number; nane varchar2(32);B:创建一个触发器:create or replace trigger trilafter insert onscott.my_empbegindbms_output.put_lind(添加一条);end;案例2:在某张表修改多条数据的时候,提示多次“修改了数据”=这里讲解行级触发器和语句级触发器A:创建一张表Create table my_emp(id number; nane varchar2(32);B:创建一个触发器:create or replace trigger tril2after update onscott.my_empfor each row-表示这是一个行级触发器begindbms_output.put_lind(修改一条);end;案例3:为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全create or replace trigger tril3before delete onscott.my_empBeginif to_char(sysdate, day) in (星期日,星期六) thendbms_output.put_lind(休息期不能删除员工);raise_application_error(100, 休息期不能删除员工);/下面截图讲解end if;end;此截图是对上面raise_application_error(100, 休息期不能删除员工);的讲解。5,使用条件谓词:当触发器中同时包含多个触发时机(insert update delete)时,为了在触发器代码中区分具体的触发事件,可以使用三个条件:inserting updating deleting案例入门: 为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全,在给出提示时,明确提示用户是进行的insert ,update还是delete操作create or replace trigger tril3before delete or update or delete onscott.my_empbegincasewhen inserting thendbms_output.put_lind(请不要添加);raise_application_error(100, 请不要添加);when updating thendbms_output.put_line(请不要修改);raise_application_error(101, 请不要修改);when deleting thendbms_output.put_line(请不要删除);raise_application_error(102, 请不要删除);end case;end;6,使用:old和:new案例:1,在修改emp表雇员的薪水时,显示雇员工资修改前和修改后的值2,如确保在修改员工工资不能低于原有工资案例2:编写一个触发器,保证当用户在删除一张emp表记录的时候,自动把删除的记录备份到另外一张表emp_bak中。A :建立一张备份表create table mep_bak(id number; name varchar2(2000);B:建立触发器create or replace trigger tri4before delete onScott。empfor each rowbegin- - 执行语句insert into emp_bak (id , name) values(:old。empno , :old。ename);end;案例3:编写一个新的触发器,如何控制员工的新工资不能低于原来的工资,同时也不能高于原来工资的20%create or replace trigger tir5before insert onscott . empfor each rowbeginif (: new . sal : old . sal * 1.2) thendbms_output.put_line(工资范围不对);raise_application_error(102, 工资范围不对);end;案例4:阻止把小于18岁的用户添加到数据库emp2表中。A:创建一张表create table emp2(id number primary key;name varchar2(32);birthday date);题外话(插入数据方法):insert into emp2 values(1,shuping,to_date(1999-11-14,yyyy-mm-dd);select username,to_char(logoff_time,yyyy-mm-dd hh24:mi:ss) from log_table;B:创建触发器create or replace trigger tir5before insert onfor each rowscott . emp2beginif add_months(:new.Birthday,18*12)sysdate thendbms_output.put_line(该用户小于18岁);raise_application_error(102, 该用户小于18岁);end;系统触发器:基本语法:create or replace tigger 触发器名字afterbefore logonlogoff on databasebegin执行语句end;应用案例:我们一起完成登录(logon)和退出(logoff)触发器 A:创建一张表,用户保存用户登录或者退出的情况。注:必须在system或者sys等用户创建。create table log_table(username varchar2(20),logon_time date,logoff_time date,address varchar2(20);B:创建触发器1,创建登录触发器create or replace trigger tir6after logon on databasebegin insert into log_table(username,logon_time,address)values(ora_login_user,sysdate,ora_cli ent_ip_address);end;2,创建退出触发器create or replace trigger tir7before logoff on databasebegin insert into log_table(username,logoff_time,address)values(ora_login_user,sysdate,ora_cli ent_ip_address);end;然后可以用普通用户登录进行测试。Ddl触发器:什么是ddl(data definition language),说白了就是我们常用的create、alter和drop这些数据定义语句ddl触发器主要用途,就是记录oracle中发生的ddl操作请编写一个触发器,可以记录某个用户进行的ddl操作步骤:1,创建一张表Create table my_ddl_record(event varchar2(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);edd;注:在oracle中dml语句需要手动提交(如果你没有手动提交,当你在退出控制台的时候,oracle会替你提交),ddl语句是自动提交的。禁用:Alter trigger 触发器名 disable;激活:Alter trigger 触发器名 enable;激活一张表所有触发器:Alter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论