触发器讲解未打印.docx
- 文档编号:9260695
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:9
- 大小:957.03KB
触发器讲解未打印.docx
《触发器讲解未打印.docx》由会员分享,可在线阅读,更多相关《触发器讲解未打印.docx(9页珍藏版)》请在冰点文库上搜索。
触发器讲解未打印
触发器:
1,提出问题:
当用户登陆的时候,自动记录该用户的名字,时间和IP。
当用户在星期天对某张表进行删除操作的时候,我们提示不能这样做
当用户删除某条记录的时候,自动将记录保存到另外一张表去
2,解决之道————触发器
触发器是指存放在数据库中,被隐含执行的存储过程,可以支持dml触发器,还支持基于系统时间(启动数据库,关闭数据库,登陆)和ddl操作建立触发器。
3,触发器的分类:
ddl(createtable,createview,drop......)触发器
dml(insert,delete,update)触发器
系统触发器(与系统相关的触发器,比如用户登陆,退出,启动数据库,关闭数据库)
4,触发器快速入门:
在某张表上添加一条数据,提示“添加了一条记录”
A:
创建一张表
Createtablemy_emp(idnumber;nanevarchar2(32));
B:
创建一个触发器:
createorreplacetriggertril
afterinserton
scott.my_emp
begin
dbms_output.put_lind(‘添加一条’);
end;
案例2:
在某张表修改多条数据的时候,提示多次“修改了数据”
====》这里讲解行级触发器和语句级触发器
A:
创建一张表
Createtablemy_emp(idnumber;nanevarchar2(32));
B:
创建一个触发器:
createorreplacetriggertril2
afterupdateon
scott.my_emp
foreachrow---表示这是一个行级触发器
begin
dbms_output.put_lind(‘修改一条’);
end;
案例3:
为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全
createorreplacetriggertril3
beforedeleteon
scott.my_emp
Begin
ifto_char(sysdate,‘day’)in(‘星期日’,‘星期六’)then
dbms_output.put_lind(‘休息期不能删除员工’);
raise_application_error(100,‘休息期不能删除员工’);//下面截图讲解
endif;
end;
此截图是对上面raise_application_error(100,‘休息期不能删除员工’);的讲解。
5,使用条件谓词:
当触发器中同时包含多个触发时机(insertupdatedelete)时,为了在触发器代码中区分具体的触发事件,可以使用三个条件:
insertingupdatingdeleting
案例入门:
为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全,在给出提示时,明确提示用户是进行的insert,update还是delete操作
createorreplacetriggertril3
before
deleteorupdateordeleteon
scott.my_emp
begin
case
wheninsertingthen
dbms_output.put_lind(‘请不要添加’);
raise_application_error(100,‘请不要添加’);
whenupdatingthen
dbms_output.put_line(‘请不要修改’);
raise_application_error(101,‘请不要修改’);
whendeletingthen
dbms_output.put_line(‘请不要删除’);
raise_application_error(102,‘请不要删除’);
endcase;
end;
6,使用:
old和:
new
案例:
1,在修改emp表雇员的薪水时,显示雇员工资修改前和修改后的值2,如确保在修改员工工资不能低于原有工资
案例2:
编写一个触发器,保证当用户在删除一张emp表记录的时候,自动把删除的记录备份到另外一张表emp_bak中。
A:
建立一张备份表
createtablemep_bak(idnumber;namevarchar2(2000));
B:
建立触发器
createorreplacetriggertri4
beforedeleteon
Scott。
emp
foreachrow
begin
----执行语句
insertintoemp_bak(id,name)values(:
old。
empno,:
old。
ename);
end;
案例3:
编写一个新的触发器,如何控制员工的新工资不能低于原来的工资,同时也不能高于原来工资的20%
createorreplacetriggertir5
beforeinserton
scott.emp
foreachrow
begin
if(:
new.sal<:
old.sal||:
new.sal>:
old.sal*1.2)then
dbms_output.put_line(‘工资范围不对’);
raise_application_error(102,‘工资范围不对’);
end;
案例4:
阻止把小于18岁的用户添加到数据库emp2表中。
A:
创建一张表
createtableemp2(idnumberprimarykey;namevarchar2(32);birthdaydate);
题外话(插入数据方法):
insertintoemp2values(1,’shuping’,to_date(‘1999-11-14’,’yyyy-mm-dd’));
selectusername,to_char(logoff_time,’yyyy-mm-ddhh24:
mi:
ss’)fromlog_table;
B:
创建触发器
createorreplacetriggertir5
beforeinserton
foreachrow
scott.emp2
begin
ifadd_months(:
new.Birthday,18*12)>sysdatethen
dbms_output.put_line(‘该用户小于18岁’);
raise_application_error(102,‘该用户小于18岁’);
end;
系统触发器:
基本语法:
createorreplacetigger触发器名字
after[before]logon[logoff]ondatabase
begin
执行语句
end;
应用案例:
我们一起完成登录(logon)和退出(logoff)触发器
A:
创建一张表,用户保存用户登录或者退出的情况。
注:
必须在system或者sys等用户创建。
createtablelog_table(usernamevarchar2(20),logon_timedate,logoff_timedate,addressvarchar2(20));
B:
创建触发器
1,创建登录触发器
createorreplacetriggertir6
afterlogonondatabase
begin
insertintolog_table(username,logon_time,address)
values(ora_login_user,sysdate,ora_client_ip_address);
end;
2,创建退出触发器
createorreplacetriggertir7
beforelogoffondatabase
begin
insertintolog_table(username,logoff_time,address)
values(ora_login_user,sysdate,ora_client_ip_address);
end;
然后可以用普通用户登录进行测试。
Ddl触发器:
什么是ddl(datadefinitionlanguage),说白了就是我们常用的create、alter和drop这些数据定义语句
ddl触发器主要用途,就是记录oracle中发生的ddl操作
请编写一个触发器,可以记录某个用户进行的ddl操作
步骤:
1,创建一张表
Createtablemy_ddl_record(eventvarchar2(64),usernamevarchar2(64),ddl_timedate);
2,创建触发器
createorreplacetriggertri9
afterddlonscott.schema
begin
insertintomy_ddl_recordvalues(ora_sysevent,ora_login_user,sysdate);
edd;
注:
在oracle中dml语句需要手动提交(如果你没有手动提交,当你在退出控制台的时候,oracle会替你提交),ddl语句是自动提交的。
禁用:
Altertrigger触发器名disable;
激活:
Altertrigger触发器名enable;
激活一张表所有触发器:
Altertable表名enablealltrigger;//只在9i上测试过
禁用一张表所有触发器:
Altertable表名disablealltrigger;//只在9i上测试过
删除触发器:
droptrigger触发器名;
特别注意:
触发器是针对所有客户端(sqlplus/sqlplusw/pl.sqldeveloper/java)的操作,只要满足触发条件,就会触发相应的触发器。
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 触发器 讲解 打印