触发器的分类

DML(insert,delete,update)触发器

DDL(create table ,create view...drop...)触发器

系统触发器(与系统相关的触发器,比如用户登录,退出,启动数据库,关闭数据库)

触发器有触发事件,触发条件,触发操作三个部分构成。

语法介绍

create [or replace] tigger tigger_name

{before|after|

{insert|delete|update[of column[,column...]]}

on[schema.]table_name

[for each row]

[where condition]

begin

grigger_body;

end;

快速入门1

在某张表(my_emnp)添加一条数据的时候,提示‘添加了一条数据’

create table my_emp(id number,name varchar2(32));

create or replace trigger tri1

after insert on scott.my_emp

begin

dbms_output.put_line('添加了一条记录');

end;

在某张表(my_emp)修改多条数据的时候,提示多次’修改了数据‘

行级触发器和语句级触发器的区别

在创建触发器的时候,带不带for each row

create or replace trigger tri2

after update on

scott.emp

for each row ---表示这是一个行级触发器

begin

dbms_output.put_line('修改了一条数据');

end;

快速入门2

为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据的安全。

create or replace trigger tri2

before delete on

scott.emp

begin

if to_char(sysdate,'day')in('星期日','星期六') then

dbms_output.put_line('对不起,休息日不能删除员工');

RAISE_APPLICATION_ERROR(-20001,'对不起,休息日不能删除员工');

end if;

end;

特别说明:RAISE_APPLICATION_ERROR这个过程,是oracle提供的,可以传入两个参数,第一个是自定的错误号-20000~-20999之间;第二个参数是提示一个信息。

 
 

PROCEDURE RAISE_APPLICATION_ERROR

(error_number_in in NUMBER,error_msg_in in VARCHAR2);

error_number_in[自定义]从-20000~-20999之间,这样就不会与ORACLE的任何错误大门发生冲突;error_msg_in[自定义]的长度不能超过2K,否则被截取到2K。

使用条件谓词

当触发器中同时包含多个触发事件(insert,update,delete)时,为了在触发器代码中区分具体的触发事件,可以使用三个条件

insterting

updating

deleting

为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据的安全,在给出提示时,明确提示用户是进行的insert,update还是delete操作。

create or replace trigger
tri3

before

insert or update or delete on

scott.emp

begin

case

when inserting then

dbms_output.put_line('休息日不要添加数据');

raise_application_error(-20002,'休息日不要添加数据');

when updating then

dbms_output.put_line('休息日不要修改数据');

raise_application_error(-20003,'休息日不要修改数据');

when deleting then

dbms_output.put_line('休息日不要删除数据');

raise_application_error(-20004,'休息日不要删除数据');

end case;

end;

使用OLDNEW

问题:当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、后列的值。

:new  修饰符访问操作完成后列的值

:old 修饰符访问操作完成前列的值

特性

INSERT

UPDATE

DELETE

OLD

NULL

有效

有效

NEW

有效

有效

NULL

案例:①在修改emp表雇员的薪水时,显示雇员工资修改前和修改后的值

②如何确保在修改员工工资不能低于原有工资

create or replace trigger tri4

before update on

scott.emp

for each row

begin

if :new.sal<:old.sal
then

dbms_output.put_line('工资不能低于原来工资');

raise_application_error(-20005,'工资不能低于原来工资');

else

dbms_output.put_line('原来的工资是:'||:old.sal||'现在的工资是:'||:new.sal);

end if;

end;

oralce触发器的更多相关文章

  1. Oralce 触发器

    今天做了一个需要用到触发器实现的功能中间去到了各种问题,还好最后都解决了: 整个过程中真是遇到了不少错误: ORA-04091: 表 KPGO.T_ISSUER 发生了变化, 触发器/函数不能读它 O ...

  2. oralce系统触发器

    系统事件是指基于oracle事件(例如logon.logoff和startup.shutdown)所建立的触发器,通过使用系统事件触发器,提供了跟踪系统或是数据库变化机制.下面介绍使用的系统事件属性函 ...

  3. oralce 存储过程、函数和触发器

    一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数.   创建存储过程 用CREATE PROCEDURE命令建立存储过程. 语法: create [or repl ...

  4. oracle的触发器

    oracle的触发器分为语句级和行级两种类型,在视图上所创建的触发器叫做什么类型的触发器? DML触发器有三类: 1, insert触发器: 2, update触发器: 3, delete触发器: 触 ...

  5. Oracle的基本语法,存储函数及触发器

    1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据 ...

  6. Oracle打怪升级之路二【视图、序列、游标、索引、存储过程、触发器】

    前言 在之前 <Oracle打怪升级之路一>中我们主要介绍了Oracle的基础和Oracle常用查询及函数,这篇文章作为补充,主要介绍Oracle的对象,视图.序列.同义词.索引等,以及P ...

  7. pt-online-schema-change中update触发器的bug

    pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...

  8. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  9. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

随机推荐

  1. 局部内部类为什么只能访问final局部变量,对于成员变量却可以随便访问?

    局部内部类为什么只能访问final局部变量,对于成员变量却可以随便访问? public class OuterClass { private int memberField = 10; public ...

  2. PHP的cURL扩展库使用详解

    在还没有接触curl的时候,相信大家在获取网页内容的时,使用得最多的一个函数就是:file_get_contents(),但是它的可控制性不够灵活,无法处理错误情况,对于各种复杂情况的采集更是显得有点 ...

  3. Redis 分布式锁进化史

    按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而说到微服务架构必然牵涉到分布式,以前单体应用加锁是很简单的,但现在分布式系统下加锁就比较难了,我之前曾简单写过一篇文章,关于分布式锁的实现 ...

  4. 在Linux中常用的启动引导工具:grub和lilo

    在Linux和WINDOWS两系统并存时就需要安装GRUB(Grand Unified Bootloader),GRUB被广泛地用于替代lilo,GRUB支持在启动时使用命令行模式,支持md5加密保护 ...

  5. Leetcode137. Single Number II只出现一次的数字2

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: ...

  6. Leetcode103. Binary Tree Zigzag Level Order Traversal二叉树的锯齿形层次遍历

    给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / ...

  7. jquery ajax跨越

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问 1.jsonp之$.ajax js $.ajax({ ...

  8. vim Tab的设置问题

    VIM 中处理 TAB 异常的方便. 键盘上的 TAB 键,与文件中的 TAB 符号一定要区分开,这是两个概念. 显示当前文件中的 Tab /\t 实际上,就是查询 \t 符号. shiftwidth ...

  9. Vue.之.项目开发工具选用

    Vue.之.项目开发工具选用 上篇文章记录了创建项目,这篇文件记录,如何对创建的项目进行开发.这里选择一个工具:Visual Studio Code (请自行下载安装) 1. 打开VSCode工具,并 ...

  10. Slackware网卡配置文件和配置工具

    Slackware 有关网卡的配置文件是/etc/rc.d/rc.inet1.conf , 这个文件包括乙太网接口的网卡和无线网卡的配置.Slackware 还是比较纯净的,网络配置也较简单:在Sla ...