Oracle的触发器

过去做项目。

都是前端后台的编码。由于数据库都让项目经理给写好的。自己对于数据库并没有多少优化,时间久了,反而把数据库的知识给淡忘了,近期的项目用到的是Oracle数据库,大家都知道。用到这个数据库。就是数据量比較大的项目了。对于优化就有必要了。因此自己下班后抽出时间复习一下,并把这个记录下来,不仅仅是分享给大家,还能以后自己再次复习。若我讲得不正确,请留言更正,本人会虚心接受并改更,这样才干进步。

1.什么是触发器

每当一个特定的数操作语句(insert,update,delete)在指定的表上发出时,Oracle自己主动的运行触发器中定义的语句序列。

这个定义,大家看到就能明确触发器的作用了,增删改查,为什么触发器没有查询呢。由于Oracle的触发器是针对数据变动时所触发的一种待定行动。

比方你删除了一个表中的字段,删除触发器就会启动,运行他的命令。

同理。改动和添加方法也是一样。仅仅要你运行了增删改方法,从而改变了表的数据时。你所设定对应的触发器就会运行。

样例:每当成功插入新员工后,自己主动打印一句话“成功插入新员工”;

create trigger saynewemp<span style="white-space:pre">	</span>//创建一个触发器 <span style="font-family: Arial, Helvetica, sans-serif;">saynewemp是触发器的名字</span>
after insert<span style="white-space:pre">			</span>//运行插入方法后触发
on emp<span style="white-space:pre">				</span>//针对是哪个表
declare<span style="white-space:pre">				</span>//声明
begin<span style="white-space:pre">				</span>//開始
   dbms_output.put_line("成功插入新员工")<span style="white-space:pre">	</span>//触发时打印一句话
end;<span style="white-space:pre">						</span>//结果

一个员工表的插入触发器就写好了。仅仅要我们对员工表运行insert插入操作后,就会运行触发器中的行为,如上所看到的,会自己主动打印一句话。

2.触发器的应用场景

  1. 复杂的安全性检查
  2. 数据的确认
  3. 数据库的审计
  4. 数据的备份和同步

第一种:复杂的安全性检查,就比方我们项目中的需求。假设有周末放假不能对数据库进行改变。那我们就能够用触发器对他进行限制

另外一种:数据的确认,比方你拿100块买1块钱的东西的时候。老板找钱给你时,你是不是要数一数,确认一下是否有没有错呢

第三种:数据库的审计,他是针对数据库的操作记录。能够记录谁对数据库进行了什么操作。Oracle已经有自带的这样的功能。我们也能够自己用触发器实现他

第四种:数据的备份和同步,这个也好理解。就是当你对数据库进行操作以后,就触发备份操作。这有点像单机游戏英雄无敌里的游戏保存一样。当轮到你操作时。就会自己主动执
行一次自己主动保存。

3.创建.触发器的语法

CREATE[or REPLACE]TRIGGER 触发器的名字<span style="white-space:pre">	</span>//创建一个触发器
{BEFORE|AFTER}<span style="white-space:pre">				</span>//触发器运行的顺序。是方法前还是方法后运行
{DELETE|INSERT|UPDATE(OF 列名)}<span style="white-space:pre">		</span>//给哪个方法设置触发器,在UPDATE方法中,能够用OF指明哪一列名
ON 表名<span style="white-space:pre">					</span>//哪个表
[FOR EACH ROW[WHEN(条件)]]<span style="white-space:pre">		</span>//假设有FOR EACH ROW,那就是行级触发器。反之,就是语句触发器
PLSQL块<span style="white-space:pre">					</span>//运行块
  1. 语句级触发器:在指定的操作语句操作之前或之后运行一次。无论这条语句影响了多少行,仅仅运行一次。

  2. 行级触发器:触发语句作用的每一条记录都被触发。在行级触发器中使用 :old 和 :new伪记录变量,识别值的状态

是不是非常抽象呢。事实上大家从名字就能够清楚知道他们的分别。

我在以下举例说明吧。

样例:我们要在把员工表中的一个字段数据(有三条)插入到新的一个表中。

<span style="white-space:pre">	</span>INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;

假设是语句级触发器的话,仅仅触发一次。由于语句级触发器:针对的是表,

而行级触发器。前面也说了,是三条记录,自然会触发三次行级触发器,也就是,针对的是行。就如前面的语法中。行级触发器FOR EACH ROW 语句,后面也能够加WHEN的条件,能够指定哪一行。

这些是触发器的介绍。看到这里。大家就能明确触发器是什么,干什么用的,在什么情景下使用了。尽管这篇非常基础,但对于新人还是有些帮助的。

时间: 2024-10-03 01:42:31

Oracle的触发器的相关文章

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

一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数据库后才能向该表中执行DML操作.(第1题中,user是系统函数,返回当前用户.字符串中使用两个单引号表示一个单引号.) 要求:分别以system用户和scott用户对emp 表执行DML操作,试验触发器的运行效果. (1)在scott用户下创建触发器 语句: create or replace t

ORACLE 11G 触发器调试记录Error: PLS-00201: identifier&#39;SYS.DBMS_SYSTEM&#39; must be declared

1,触发器内容如下 CREATE OR REPLACE TRIGGER"LOGON_DENIED_TO_ALERT" AFTER servererror ON DATABASE DECLARE message   VARCHAR2(168); ip        VARCHAR2(15); v_os_user VARCHAR2(80); v_module  VARCHAR2(50); v_action  VARCHAR2(50); v_pid     VARCHAR2(10); v_s

oracle中触发器的讲解

触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行.即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT.UPDATE及DELETE操作或对视图进行类似的操作.ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等.所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,

Oracle中触发器(1)

Oracle数据库触发器是存储于数据库的命名PL/SQL语句块,当触发事件发生时他们会隐含的执行,执行触发器的活动被称为触发触发器. 特定用户在特定模式下,或者任何用户执行的ddl语句(如create或者alter),这种触发器经常被用于审计目的,并且专用于oracle DBA.可以记录各种模式修改,何时执行.以及那个用户执行的. 系统事件,如数据库启动或者关闭 用户事件,如登录或者注销.即可以定义一个触发器,在用户登录数据库时记录用户名和登录时间. 触发器相关视图: 创建触发器的通用语法: c

oracle 中触发器增加存储过程commit问题

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了 当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务 正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句. 解决办法有两种: 1.在可以在触发器中加入:pragma autonomous_transaction; 表示自由事务处理.如: create or replace trigger UPDA

oracle利用触发器实现自增列

oracle没有自增列功能,mysql 和 sqlserver 分别用auto_increment和identity(1,1)来实现自增.oracle要实现只能通过序列实现,每次插入的时候通过取序列的值显示的给自增列,感觉有些不方便,这里使用触发器来代替,从而使插入的时候三者数据库在语法上一致,便于DAO代码的移植.下面是ORACLE实现示例,步骤如下:                                                                        

Oracle使用触发器和mysql中使用触发器的比较——学习笔记

一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志,自动通知好友,其实就是在增加日志的时候做一个出发,再向表中写入条目. --触发器的效率很高 举例:论坛的发帖,每插入一个帖子都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,这时使用触发器效率会很高. 二.Oracle 使用 PL/SQL 编写触发器 1.--PL/SQL创建触发器的一般语法

MYSQL和ORACLE的触发器与存储过程语法差异

整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下: 触发器: 差异 MYSQL ORACLE 说明 创建语句不同 create trigger `AA` BEFORE INSERT on `BB` for each row  create or replace trigger AA  before insert or update or delete on BB  for each row 1.Oracle可以在一个触发器触发insert,delete,update事件.    Mysq

ORACLE数据库触发器【转载】

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