Oracle数据库——触发器的创建与应⽤
⼀、涉及内容
1.理解触发器的概念、作⽤和类型。
2.练习触发器的创建和使⽤。
⼆、具体操作
(实验)
1.利⽤触发器对在p表上执⾏的DML操作进⾏安全性检查,只有scott⽤户登录数据库后才能向该表中执⾏DML操作。(第1题中,user是系统函数,返回当前⽤户。字符串中使⽤两个单引号表⽰⼀个单引号。)
要求:分别以system⽤户和scott⽤户对emp 表执⾏DML操作,试验触发器的运⾏效果。
(1)在scott⽤户下创建触发器
语句:
create or replace trigger tri_dm1
before insert or update or delete p
begin
if user<>'SCOTT'then
raise_application_error(-20001,'You don''t have access to modify this table.');
end if;
end;
/
截图:
(2)以system ⽤户连接,并对emp表执⾏DML操作
语句:
conn system/orcl1234;
insert p(empno,ename) values(8888,'shenxiao');
截图:
(3)以scott⽤户连接,并对emp表执⾏DML操作
语句:
conn scott/tiger;
insert p(empno,ename) values(8888,'shenxiao');
截图:
2.利⽤触发器进⾏表和备份表之间的同步复制。
(1)在scott ⽤户下创建p 表的复本 employee。
语句:
conn scott/tiger;
create table employee as select * p;
截图:
(2)在scott⽤户下创建能实现p和employee 两表之间同步复制的DML触发器。语句:
create or replace trigger duplicate_emp
after update or insert or delete p
for each row
begin
if inserting then
insert into employee values (:pno,:ame,:new.job,:,
:new.hiredate,:new.sal,:newm,:new.deptno);
elsif deleting then
delete from employee where empno=:pno;
else
update employee set empno=:pno,ename=:ame,job=:new.job,
mgr=:,hiredate=:new.hiredate,sal=:new.sal,comm=:newm,
deptno=:new.deptno
where empno=:pno;
end if;
end;
/
截图:
(3)对p表进⾏插⼊、删除和更新操作。
删除:delete p where empno=7934;
插⼊:
Insert p(empno,ename,job,sal) values(1111,'zhangsan','ANALYST',2900)
更新:
p set sal=3900 where empno=1111;
(4)查询p表和employee表中插⼊、删除和更新的记录。
语句:select * p;
select * from employee;
oracle 时间转换截图:
3.建⽴触发器,对p 表进⾏DML操作时的时间、⽤户进⾏⽇志记录。(1)建⽴⽇志表emp_log。
语句:create table emp_log(who varchar2(30),when date,oper varchar2(10));
截图:
(2)在emp表上建⽴语句级触发器,将对emp表执⾏的操作记录到emp_log表中。语句:
create or replace trigger dm1_log
after insert or update or delete p
declare
oper emp_log.oper%type;
begin
if inserting then
oper:='insert';
elsif deleting then
oper:='delete';
else
oper:='update';
end if;
insert into emp_log values(user,sysdate,oper);
end;
/
截图:
(3)对p 执⾏DML操作,查看emp_log 表中的数据。
语句:
insert p(empno) values(1112);
select*from emp_log;
截图:
(习题)
1.简述Oracle 数据库中触发器的类型及触发条件。
答:触发器的类型及触发条件如下表所⽰:
按划分类型触发器的类型触发条件
按照触发的时间BEFORE触发器,指事前触发器在触发语句执⾏前触发器被触发
AFTER触发器,指事后触发器在触发语句执⾏以后触发器被触发
INSTEAD OF触发器,指替代触发器触发语句被触发器操作替代
按照触发的事件DML触发器对表或视图执⾏DML操作时触发的
触发器
DDL触发器在数据库中执⾏DDL操作时触发的触
发器
⽤户事件触发器与⽤户执⾏的DCL操作或
LOGON/LOGOFF操作相关的触发
器
系统事件触发器是指由数据库系统事件触发的触发器其中,DML触发器,按照触发时DML操作影响的记录多少,⼜可分为:
⾏级触发器:DML语句每操作⼀⾏,⾏级触发器就会被调⽤⼀次
语句级触发器:DML语句不论影响多少⾏数据,语句级触发器只被调⽤⼀次
DDL触发器⼜可以分为:
数据库级DDL触发器:数据库中任何⽤户执⾏了相应的DDL操作该类触发器都被触发。
⽤户级DDL触发器:只有在创建触发器时指定⽅案的⽤户执⾏相应的DDL操作时触发器才被触发,其他⽤户执⾏该DDL操作时触发器不会被触发。
2.描述⼀个触发器的组成部分及其作⽤。
答:在Oracle系统中,触发器包括以下⼏个组成部分:
组成部分作⽤
1.触发器名称触发器名是在创建触发器为触发器起的名称。⼀般包括:触发器执
⾏的时间、执⾏的操作、涉及的表、涉及的列等。
2.触发语句触发语句是导致Oracle执⾏触发器操作的诱因,它包括对触发时
间、触发事件和触发对象的定义。只有⽤户对数据库执⾏的操作满
⾜触发语句中定义的所有内容后,触发器才有可能被系统⾃动调
⽤。
3.触发限制条件触发限制条件是决定触发器是否被系统⾃动调⽤的另⼀个因素。当
⽤户的操作满⾜触发语句时,触发器不⼀定被调⽤,此时,系统还
要检查触发器中是否定义了触发限制条件,如果存在,还要检查当
前的操作是否满⾜限制条件。
4.触发器操作触发器操作是触发器的主体,是被系统⾃动执⾏的PL/SQL 程序块。
当触发语句和触发限制条件都满⾜时,系统将⾃动执⾏触发器操作
部分的代码。
3.简述替代触发器的作⽤。
答:
创建触发器时若选择了INSTEAD OF⼦句,那么该触发器就是替代触发器。替代触发器只能建⽴在视图上不能建⽴在表上。⽤户在视图上执⾏的DML操作将被替代触发器中的操作代替。
替代触发器主要解决对不可更新视图执⾏更新操作时带来的问题。在定义视图时,如果视图中没有选择基础表的主键咧,或者视图中的数据来⾃多个基础表,那么⽤户将⽆法对这样的视图直接执⾏插⼊、修改、删除操作。这种情况下,⽤户可以针对是视图创建⼀个替代触发器,将对视图的更新操作转换为对基础表的操作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论