在钦赐的操作语句操作以前或之后执行三遍,Oracle自动地履行触发器中定义的语句体系

触发器

触发器

说明

数据库触发器是3个与表相关联的、存款和储蓄的PL/SQL程序。每当2个特定的数码操作语句(insert、update、delete)在钦命的表上发出时,Oracle自动地实施触发器中定义的语句种类。

说明

数据库触发器是二个与表相关联的、存款和储蓄的PL/SQL程序。每当一个特定的数额操作语句(insert、update、delete)在内定的表上发出时,Oracle自动地实践触发器中定义的语句系列。

触发器的种类

触发器的种类

语句级触发器

在钦定的操作语句操作以前或之后执行二回,不管那条语句影响了有些行。

语句级触发器

在钦点的操作语句操作此前或之后执行一次,不管那条语句影响了多少行。

行级触发器(FOKuga EACH ROW)

触发语句成效的每一条记下都被触发。在行级触发器中动用old和new伪记录变量,识别值的情状。

行级触发器(FOPRADO EACH ROW)

触发语句成效的每一条记下都被触发。在行级触发器中动用old和new伪记录变量,识别值的地方。

触发器成效

一 、数据肯定。例如,扩展薪金不可能低于原薪水。

贰 、实施复杂的安全性检查。例如,周末取缔更改或新增多少。

三 、做审计,跟踪表上所做的数量操作等。例如,操作记录。

肆 、数据的备份和一块。

触发器功效

① 、数据肯定。例如,扩展工资不能够低于原薪酬。

② 、实施复杂的安全性检查。例如,周末禁止更改或新增多少。

叁 、做审计,跟踪表上所做的数量操作等。例如,操作记录。

肆 、数据的备份和联合。

创造触发器

  1. CREATE [or REPLACE] THavalIGGE路虎极光 触发器名
  1.   (BEFORE|AFTER)

  2.   (DELETE|INSERT|UPDATE[OF 列名])

  1.   [FOR EACH ROW[WHEN(条件)]]
  1. PLSQL 块

开创3个非工时不可能修改数据的触发器。

  1. –获得当前是几点

  2. to_char(sysdate,’hh24′)

  3. –将字符转换为数字

  4. to_number(to_char(sysdate,’hh24′))

  1. –判断非工时

  2. not
    (to_number(to_char(sysdate,’hh24′)) between 9 and 17)

  3. –阻止执行

  4. raise_application_error(-三千0,’非工时禁止修改数据’);

在触发器中梗阻SQL继续执行的点子,抛出贰个不当。错误号码应该在-两千0到-20999时期,否则提醒”错误号参数超出范围”。

  1. create or replace

  2. trigger mytrigger

  3. before insert

  4. on table_001

  5. declare

  6. begin

  7.   if
    not (to_number(to_char(sysdate,’hh24′)) between 9 and 17) then

  1.     raise_application_error(-两千0,’非工作时间禁止更新数据’);
  1.   end if;

  2. end;

开创三个增添薪酬不能够低于原薪俸的触发器。

  1. declare

  2. begin

  3.   if
    新工资 < 原工资 then

  4.     raise_application_error(-两千1,’薪俸不可能低于原薪资’);

  1.   end if;

  2. end

触发语句与伪代记录变量的值。

触发语句

:old

:new

insert

所有字段都是空(null)

将要插入的数据

update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)

  1. create or replace trigger checkSal
  1. before update

  2. on table_002

  3. for
    each row

  4. declare

  5. begin

  6.   if
    :new.sal < :old.sal then

  7.     raise_application_error(-三千1,’涨工资不能够低于原报酬’);

  1.   end if;

  2. end;

  3. /

查阅全数的触发器对象。

  1. select * from user_triggers;

删除触发器。

  1. drop trigger checkSal;  

开创触发器

  1. CREATE [or REPLACE] T奥迪Q7IGGE哈弗 触发器名
  1.   (BEFORE|AFTER)

  2.   (DELETE|INSERT|UPDATE[OF 列名])

  1.   [FOR EACH ROW[WHEN(条件)]]
  1. PLSQL 块

创设贰个非工时不能修改数据的触发器。

  1. –获得当前是几点

  2. to_char(sysdate,’hh24′)

  3. –将字符转换为数字

  4. to_number(to_char(sysdate,’hh24′))

  1. –判断非工时

  2. not
    (to_number(to_char(sysdate,’hh24′)) between 9 and 17)

  3. –阻止执行

  4. raise_application_error(-20000,’非做事时间禁止修改数据’);

在触发器中梗阻SQL继续执行的方式,抛出1个漏洞非常多。错误号码应该在-三千0到-20999时期,不然提示”错误号参数超出范围”。

  1. create or replace

  2. trigger mytrigger

  3. before insert

  4. on table_001

  5. declare

  6. begin

  7.   if
    not (to_number(to_char(sysdate,’hh24′)) between 9 and 17) then

  1.     raise_application_error(-两千0,’非做事时间禁止更新数据’);
  1.   end if;

  2. end;

创制贰个充实薪给无法低于原薪金的触发器。

  1. declare

  2. begin

  3.   if
    新工资 < 原工资 then

  4.     raise_application_error(-贰仟1,’工资不能够低于原薪酬’);

  1.   end if;

  2. end

触发语句与伪代记录变量的值。

触发语句

:old

:new

insert

所有字段都是空(null)

将要插入的数据

update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)

  1. create or replace trigger checkSal
  1. before update

  2. on table_002

  3. for
    each row

  4. declare

  5. begin

  6.   if
    :new.sal < :old.sal then

  7.     raise_application_error(-20001,’涨报酬不能够低于原报酬’);

  1.   end if;

  2. end;

  3. /

查看全体的触发器对象。

  1. select * from user_triggers;

删除触发器。

  1. drop trigger checkSal;  

相关文章