Oracle数据库——触发器的创建与应用

一、涉及内容

1.理解触发器的概念、作用和类型。

2.练习触发器的创建和使用。

二、具体操作

(实验)

1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作。(第1题中,user是系统函数,返回当前用户。字符串中使用两个单引号表示一个单引号。)

要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果。

(1)在scott用户下创建触发器

语句:

create or replace trigger tri_dm1
 before insert or update or delete on scott.emp
 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 into scott.emp(empno,ename)  values(8888,‘shenxiao‘);

(3)以scott用户连接,并对emp表执行DML操作

语句:

conn scott/tiger;
insert into scott.emp(empno,ename)  values(8888,‘shenxiao‘);

2.利用触发器进行表和备份表之间的同步复制。

(1)在scott 用户下创建scott.emp 表的复本 employee。

语句:

conn scott/tiger;

create table employee as select * from scott.emp;

(2)在scott用户下创建能实现scott.emp和employee 两表之间同步复制的DML触发器。

语句:

create or replace trigger duplicate_emp
 after update or insert or delete on scott.emp
 for each row
 begin
   if inserting then
     insert into  employee values (:new.empno,:new.ename,:new.job,:new.mgr,
                                   :new.hiredate,:new.sal,:new.comm,:new.deptno);
   elsif deleting then
     delete from employee where empno=:old.empno;
   else
     update employee set empno=:new.empno,ename=:new.ename,job=:new.job,
                         mgr=:new.mgr,hiredate=:new.hiredate,sal=:new.sal,comm=:new.comm,
                          deptno=:new.deptno
     where empno=:old.empno;
   end if;
  end;
 /

(3)对scott.emp表进行插入、删除和更新操作。

删除:delete from scott.emp where empno=7934;

插入:

Insert into scott.emp(empno,ename,job,sal) values(1111,‘zhangsan‘,‘ANALYST‘,2900)

更新:

update scott.emp set sal=3900 where empno=1111;

(4)查询scott.emp表和employee表中插入、删除和更新的记录。

语句:select * from scott.emp;

select * from employee;

3.建立触发器,对scott.emp 表进行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 on scott.emp
 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)对scott.emp 执行DML操作,查看emp_log 表中的数据。

语句:

insert into scott.emp(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操作将被替代触发器中的操作代替。

替代触发器主要解决对不可更新视图执行更新操作时带来的问题。在定义视图时,如果视图中没有选择基础表的主键咧,或者视图中的数据来自多个基础表,那么用户将无法对这样的视图直接执行插入、修改、删除操作。这种情况下,用户可以针对是视图创建一个替代触发器,将对视图的更新操作转换为对基础表的操作。

时间: 2024-08-02 02:50:56

Oracle数据库——触发器的创建与应用的相关文章

如何彻底删除Oracle数据库,以创建相同实例名称的库

今天建库时选择了OMF方式,结果文件名称采用Oracle自动命名的方式,看不懂啊,于是乎决定删除再重建. Oracle提供了删除数据库的指令:drop database. 需要数据库处于mount状态,然后alter system enable restricted session;,网上有帖子说还需要exclusive,由于我是VM装的,用户只有我一个,所以不用可以.由于当前处于open状态,需要改为mount,执行: SQL> alter database close; alter data

Spotlight监控Oracle数据库的链接创建

最近在做性能测试时,由于要挂载空间数据,开发人员直接将所有业务表都挂到了Oracle数据库中.最近做了几次测试发现响应时间和吞吐量都不是很理想,进行一番分析后怀疑可能在Oracle中出现问题,因此再网上找了一下相关的监控程序,最终发现Spotlight,但是没有详细的说明(也有可能是我没找到),下面将我之前如何连接Oracle并进行监测的一些经验分享一下,如有瑕疵请各位指教. 首先Spotlight的安装和部署我就不多说了,我相信大家都是很聪明的,安装一下so easy. 这里我要说的是一定要安

Oracle数据库安装与创建

1.Oracle数据库安装 参考博客:Oracle 11g数据库详细安装步骤图解 2.Oracle数据库创建 参考博客: oracle入门很简单:二.创建oracle数据库 参考博客:系列文章--oracle简单入门教程

ORACLE数据库触发器【转载】

ORACLE 触发器其实是PL/SQL块,它类似于存储过程和函数,不过有一点不同的是,触发器是隐式调用的,并不能接收参数.    ORACLE触发器有三种类型,分别是:DML触发器, 替代触发器和系统触发器. 下面对这三种类型一一进行讲述 1.DML触发器 顾名思义,DML触发器是由DML语句触发的.例如数据库的INSERT/UPDATE/DELETE操作都可以触发该类型的触发器. 它们可以在这些语句之前或之后触发,或者在行级上触发(就是说对于每个受影响的行都触发一次) 例如我们有一张表TABL

Oracle数据库—— 游标的创建和应用

一.涉及内容 游标的创建与应用 二.具体操作 (一)填空题 1.PL/SQL 程序块主要包含3个部分:声明部分.(执行部分 ).异常处理部分. 2.自定义异常必须使用(RAISE )语句引发. (二)选择题 1.下列哪一个不是BOOLEAN变量可能的取值?(D ) A.TRUE  B.FALSE  C.NULL D.BLANK 2.请查看以下IF语句: Declare sal number:=500; comm number; Begin If sal <100 then Comm :=0; E

Oracle数据库——表的创建与管理

一.涉及内容 1.掌握使用OEM工具创建.修改和删除表. 2.掌握使用SQL语句创建.修改和删除表. 3.掌握使用SQL语句插入.修改和删除数据. 4.理解各种约束的作用,并能够使用OEM工具和SQL命令为表创建各种约束. 二.具体操作 (一)分别使用OEM和SQL语句完成下面的内容. 1.创建表并添加相应的约束.要求: (1)创建名为student(学生信息)的表,表中各列要求如下: 字段名称 字段类型 大小 说明 sno CHAR 10 主键 sname VARCHAR 8 sex CHAR

Oracle 通过触发器 来创建 同步临时表 及处理 通过 自治事务 来解决 查询 基表的问题

// 触发器 create or replace trigger tr_sync_BD_MARBASCLASS after INSERT or UPDATE on BD_MARBASCLASS for each row declare v_cnt integer; PRAGMA AUTONOMOUS_TRANSACTION; -- 自治事务 begin /** * Name : tr_sync_BD_MARBASCLASS * Desc : 物料分类 增量同步 触发器 * Author : wu

oracle数据库表空间创建&amp;导入&amp;导出

1.表空间创建 --删除表空间 drop tablespace EVPBDMGIS including contents and datafiles; --删除用户 drop user EVPBDMGIS cascade; --创建表空间 create tablespace EVPBDMGIS datafile 'D:\app\Administrator\oradata\orcl\EVPBDMGIS.DBF' size 500m reuse autoextend on next 16m maxs

Oracle数据库scott用户创建view视图权限

以sysdba身份登陆, sqlplus / as sysdba 然后授权给scott用户 grant create view to scott