Oracleday03 触发器(trigger)

标签: oracle 数据库 javaee 企业级开发 web
7人阅读 评论(0) 收藏 举报
分类:

触发器的概念

数据库触发器是一个与表相关联的,存储的pl/sql程序, 相当于特定的数据操作语句(insert ,update,delete)在指定的表上出发时,oracle 自动的触发触发器中定义的语句序列

eg.当向表中插入数据的时候自动打印一“成功插入新员工”

create trigger firsttrigger 
after  insert 
on emp 
declare 
begin 
dbms_output.put_line('Hello world');
end ; 

// 然后我们插入语句
insert  into emp (ename,sal,empno) values('张三',100,1111) ; 
触发器用于

1. 数据确认

2. 实施复杂的安全性检查

3. 做审计(日志 ),跟踪表上所做的数据操作等   (审计功能是很重要的) 银行

如果想做什么事情 , 先把数据库中的审计关掉就没有记录了

    1.基于值的审计

    2. 强制审计

    3.标准审计(配置)

    4.细粒度审计

    5.管理员审计

4. 数据同步和备份

创建触发器

 create or replace trigger 触发器名字

before  / after

delete insert update (of列名 )   of  只有更新这个列的时候才能触发函数

on 表名   

for each row  where 条件   行级触发器

plsql 代码块

触发器的类型

语句级的触发器(针对的是表

   在指定的语句操作之前后之后执行一次,不管这条语句印象了多少行,

行级触发(for each row ) (针对的是行

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

:old  是之前

:new  是之后


案例

1. 禁止在非工作时间插入数据

/**
触发器应用一, 实施复杂的安全性, 
禁止非工作时间插入新员工 
1. 周末是非工作时间 
   to_char(syadate,'day') in ('sunday','Saturday'); 
2.上班前, 和下班后, 9.00  和  18.00 后  to_numbber(to_char(sysdate,'hh24'))  not between 9 and 17 
 */
create or replace trigger securityemp
before insert 
on emp 
begin
  if to_char(sysdate,'day') in ('sunday','Saturday') or 
    to_number(to_char(sysdate,'hh24')) not between 9 and 17 then 
    
    -- 禁止insert 
    raise_application_error(-20001,'禁止再非工作时间内插入新员工'); 
    end if ; 
end securityemp;


// 调用
SQL> insert into emp (ename) values ('李四') ;
insert into emp (ename) values ('李四')
            *
ERROR at line 1:
ORA-20001: 禁止再非工作时间内插入新员工
ORA-06512: at "SCOTT.SECURITYEMP", line 6
ORA-04088: error during execution of trigger 'SCOTT.SECURITYEMP' 

这个触发器是针对表的语句触发器,


2. 数据的确认 (使用oracle 中提供的 :old  和 :new )

/**
数据的确认, 
涨后的薪水不能少于涨前的薪水
*/
create or replace trigger checksalary
before  update
on  emp   
for each row
begin
    -- 判断涨前后工资
     if :new.sal < :old.sal then 
       raise_application_error(-20002,'涨后的工资不能低于涨后的工资。涨前:' || :old.sal || '涨后:' || :new.sal); 
      end if ;  
end checksalary;

// 触发触发器 
SQL> update emp set sal=2000 where empno=1001 ;
update emp set sal=2000 where empno=1001
       *
ERROR at line 1:
ORA-20002: 涨后的工资不能低于涨后的工资。涨前:28300涨后:2000
ORA-06512: at "SCOTT.CHECKSALARY", line 4
ORA-04088: error during execution of trigger 'SCOTT.CHECKSALARY'







































查看评论

trigger触发器和自定义方法

$(function () { var oTxt = $("input"); //trigger触发器,需要把事件放在自己的身上去触发事件;触发事件不需要用户...
  • younghaiqing
  • younghaiqing
  • 2016-10-21 15:35:44
  • 964

在trigger中实现本表中修改插入的行

做一个表的insert的trigger,目的是只修改插入行的字段。 CREATEORREPLACETRIGGER TR_RME_SLOT BEFORE    INSERTONRME_SLOT    F...
  • yurenjia
  • yurenjia
  • 2007-06-01 20:20:00
  • 740

WPF如何使用触发器

1.WPF如何实现下面的功能 2.下面就是利用属性触发器实现
  • sinat_32124195
  • sinat_32124195
  • 2015-11-02 20:29:11
  • 1560

MySQL触发器Trigger实例篇

MySQL触发器Trigger实例篇 发表于668 天前 ⁄ IT技术 ⁄ 暂无评论 以前关注的数据存储过程不太懂其中奥妙,最近遇到跨数据库,同时对多个表进行CURD(Create...
  • hireboy
  • hireboy
  • 2014-01-10 11:45:49
  • 30292

[oracle] 触发器使用教程和命名规范

触发器使用教程和命名规范       目  录   触发器使用教程和命名规范    1  1,触发器简介 1  2,触发器示例 2  3,触发器语法和功能  3  4,例一:行级触发器之一    4 ...
  • xys_777
  • xys_777
  • 2010-07-16 01:04:00
  • 4381

quartz教程-触发器Trigger

quart教程-触发器
  • QXC1281
  • QXC1281
  • 2017-03-31 13:33:25
  • 3451

7、触发器(trigger)的操作-----第2篇

对应第8章一个项目下有个触发器文件夹。 触发器:不是由程序或手工启动,而是由事件触发。 比如,插入顾客信息时,自动检查电话是否正确,地址是否正确。 在SQL中,只有INSERT语句、DELETE...
  • tonghuawanli
  • tonghuawanli
  • 2016-07-11 08:15:46
  • 543

触发器会出现死循环!~~

这几天突然会有这样的一个需求,需要重复表的记录, 除了插入到表的记录的AC列不同之外,其余的字段完全相同的。对于这个需求,我一开始想到的是在倒入数据文件的时候,它会删掉原表的数据,那就使用一个触发器来...
  • hbhg2007xs
  • hbhg2007xs
  • 2015-10-22 15:38:40
  • 400

触发器(TRIGGER)对DB2数据库系统性能的影响

触发器(TRIGGER)对DB2数据库系统性能的影响摘要:触发器(TRIGGER)是DB2数据库系统的一个重要特性。触发器是一种特殊的存储过程,它在插入(INSERT),删除(DELETE)或更新(U...
  • sleep_ok
  • sleep_ok
  • 2007-07-16 16:13:00
  • 1706

mariadb/mysql触发器实验

今天写了一个触发器: delimiter $ CREATE TRIGGER TR after update ON T for each row begin declare a1  INT...
  • qq632544991p
  • qq632544991p
  • 2015-12-22 22:11:27
  • 757
    个人资料
    持之以恒
    等级:
    访问量: 271
    积分: 302
    排名: 27万+
    博客专栏
    java

    文章:0篇

    阅读:0
    文章分类
    文章存档
    最新评论