




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
触发器触发器的基本概念触发器是指隐含执行的存储过程。是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。触发器的语法:create or replace trigger trigger_name after/before insert or update or deleteon table_namereferencing old as old_value new as new_valuefor each row /for each statementbegin 代码块;end ; 语法解析:1、create or replace创建一个触发器。Replace表示当触发器存在相同的触发器时,替换掉已存在的触发器。2、after/before 表示触发时机。事件之前执行还是事件之后执行。3、insert/update/delete触发器监控的事件4、on table_name 触发器监控的表:table_name5、for each row 行触发器。每操作一行就触发一次 for each statement语句触发器。针对指定语句激活一次。6、referencing 设置参照变量,as表示作为。old_value,new_value行变量。分别表示事件发生前/后的数据所在的行。即old_value表示操作前的数据,new_value表示操作后的数据。可以用old_value.字段名、new_value.字段名,调用相应的字段。触发器的功能允许/限制对表的操作自动生成派生列,例如自增字段强制数据一致性提供审计和日志管理防止无效的事务处理启用复杂的业务逻辑触发器的组成1、 触发器名称2、 触发语句3、 触发器限制4、 触发操作Instance:create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old as old_value new as new_value for each row when (new_value.department_id80 ) begin :new_mission_pct :=0; end;1、 触发器名称:create trigger trigger_name2、 触发语句:before/after insert or update of Columns Name|department_id on Table Name|employees referencing old as old_value new as new_value for each row说明:1、表或视图上的DML语句 DDL语句 数据库关闭或启动,startup shutdown 等等 2、无论是否规定了department_id ,对employees表进行insert的时候都会触发 3、对employees表的department_id列进行update的时候也会触发触发器。3、 触发器限制:when (new_value.department_id80 )限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。其中的new_value是代表跟新之后的值。4、 触发操作触发操作是触发器的主体。begin :new_mission_pct :=0; end;这里主体表示的是将更新后的commission_pct设置为05、 触发insert into employees(employee_id, last_name, first_name, hire_date, job_id, email, department_id, salary,commission_pct)values(12345,chen,Donny,syadate,12, ,60,10000,.25);select commission_pct from employees where employee_id=12345;触发器在不通知用户的情况下,已经对用户输入的数据值进行修改。触发器的类型1、 语句触发器2、 行触发器3、 instead of 触发器4、 用户事件触发器5、 系统事件触发器各种触发器的详解:1、 语句触发器:语句触发器是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与insert、update、delete或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次 。比如,无论update多少行,也只会调用一次update语句触发器。Example One:1、创建一个实验表create table example_trigger_student( stu_no number(6), stu_name varchar2(20), stu_age number(3), stu_sex varchar2(10);2、创建一个自增序列create sequence example_trigger_stu;3、创建触发器。触发器名称为biud_student1create or replace trigger biud_student1before insert or update or delete on example_trigger_studentbegin -区分大小写。hby与HBY -if user not in(hby)then if user not in(HBY)then -raise_application_error固定语句 raise_application_error(-20001,you dont hava access to modify this table); end if;end;4、插入数据,触发insert into example_trigger_student values(example_trigger_stu.nextval,Dan,24,male);5、查询表里面的内容select * from example_trigger_student;Example Two:1、记录用户时间和用户create table example_trigger_student_logs( stu_user varchar2(20), modify_time date);2、创建触发器,将年龄修改为20create or replace trigger biud_student2before insert or update or delete on example_trigger_studentbegininsert into example_trigger_student_logs values(user,sysdate);end;3、插入数据insert into example_trigger_student values(example_trigger_stu.nextval,Nate,24,male);insert into example_trigger_student_logs values(Lily,sysdate);select * from example_trigger_student_logs;2、 行触发器:是指为受到影响的各个行激活的触发器,定义与语句触发器类似,有以下两个例外:1、定义语句中包含FOR EACH ROW子句 2、在BEFOREFOR EACH ROW触发器中,用户可以引用受到影响的行值。Example One:1、创建触发器create trigger biu_studentbefore insert or update on example_trigger_studentreferencing old as old_value new as new_value -当for each row与when语句交换位置,会显示:when子句不能和表层触发器一起使用。for each rowwhen (new_value.stu_no20)begin :new_value.stu_age:=20;end;Example Two:1、创建表create table foo( id number, f_data varchar2(20);2、创建自增序列create sequence foo_seq;3、创建触发器create or replace trigger bifer_foo_id_pkbefore insert on foofor each rowbegin -在冒号和new之间不能有空格。 select foo_seq.nextval into :new.id from dual;end;4、插入数据,触发insert into foo(f_data)values (donny);insert into foo values (5,Chen);说明:1、referencing子句执行DML语句之前默认值为old,之后为new insert操作只有newdelete操作只有oldupdate操作old与new都具备 2、DDL:数据定义语言 DML:数据操作语言3、DUAL:diffusing update algorithm 弥散更新算法。Dual是oracle与数据字典一起自动创建的一个虚拟表。只有一列:dummy。其数据类型为varchar2(1)。Dual只有一行数据:X,属于sys模式。所有的用户都可以使用dual名称访问。Dual主要用来查询不属于实际表里面的内容。有时也用来检查某表某条件的记录存在性。3、 instead of 触发器:更新视图。Instead of触发器的主要优点是:使不能更新的视图支持更新。基于多个表的视图必须使用。Instead of 触发器支持多个表中数据的插入、更新和删除。但是不能在带有with check option定义的视图中创建instead of 触发器。Example :-instead of 多表之间的操作1、创建表create table example_stu( stu_no number(6), stu_name varchar2(20);create table example_cou( s_no number(6), grade number(4,1);2、创建视图。create view sc_view as select example_stu.stu_no,stu_name, grade from example_stu,example_cou;-插入下面的语句,会显示无法修改与非建值保存列对应的表。直接插入数据时,由于是基于两张表创建的,执行时会产生错误。-insert into sc_view values(5,Lily,85);3、创建触发器create trigger inofi_sc_viewinstead of insert on sc_viewbegin insert into example_stu values(:new.stu_no,:new.stu_name); -stu_no是视图中的。并不是表中的example_cou insert into example_cou values(:new.stu_no,:new.grade);end;4、插入数据insert into sc_view values(5,Lily,85);说明:1、instead of 是一种单独的触发机制。用来管理和执行view类型的数据表单 2、Of &on 监控关键字。Of可以省略。On必须保留。 3、每一个表和视图只能有一个instead of触发器。4、 用户事件触发器:又叫DDL事件触发器。用户事件:用户登陆、注销,create / alter / drop / analyze / audit / grant / remoke / rename / truncate / logoffExample:-禁止用create、drop。alter、truncate命令操作hby对象create or replace trigger test_no_ddl-如果是test.schema会显示表或视图不存在,test.database则显示权限不足.-hby.schema表示的是用户hby对象的结果before create or alter or drop or truncate on hby.schemabegin raise_application_error(-20001,不允许用DDL操作hby用户的对象!);end;-为了确保其他触发器能够运行,多数情况下,用户事件触发器需要禁止运行。alter trigger test_no_ddl disable;说明:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年财务会计招聘面试模拟题详解与技巧
- 2025年数据分析师职业认证考试模拟题解析
- 2025年环境工程师中级职业资格认证考试模拟题集及答案详解
- 2025年特岗教师招聘考试初中数学备考攻略及经典模拟题解析
- 2025年物管初级考试高频考点及模拟题解析
- 2025年特岗教师招聘考试初中政治复习大纲及模拟题
- 崇左幼儿师范高等专科学校《数据学分析实验》2024-2025学年第一学期期末试卷
- 河南理工大学《机器学习与测井技术》2024-2025学年第一学期期末试卷
- 2025年交通运输局公务员招录考试预测题
- 二年级数学(上)计算题专项练习
- 药品生产企业药品安全信用评价指标及评分标准
- 台州市水处理发展有限公司化工废水处理工程项目环评报告
- 用合作协议规避劳动合同
- 镗工(技师)技能鉴定精练考试题(附答案)
- 毕节地区金沙县2025年小升初易错点数学检测卷含解析
- 代班协议模板
- 原材料检验员知识培训
- 2025年全国交管12123驾驶证学法减分考试题库及答案
- 《进项税额的抵扣》课件
- 工地检测员应聘简历
- 汽车零配件销售代理授权书
评论
0/150
提交评论