oracle触发器~

- 日理万妓 2021-12-17 03:29 536阅读 0赞
  1. 触发器是一种特殊的存储过程,下面是触发器的详细说明:

  ORACLE 触发器

  ORACLE产生数据库触发器的语法为:

  create [or replace] trigger 触发器名 触发时间 触发事件

  on 表名

  [for each row]

  pl/sql 语句

  其中:

  触发器名:触发器对象的名称。由于触发器是数据库自动执行 的,因此该名称只是一个名称,没有实质的用途。

  触发时间:指明触发器何时执行,该值可取:

  before—-表示在数据库动作之前触发器执行;

  after—-表示在数据库动作之后出发器执行。

  触发事件:指明哪些数据库动作会触发此触发器:

  insert:数据库插入会触发此触发器;

  update:数据库修改会触发此触发器;

  delete:数据库删除会触发此触发器。

  表 名:数据库触发器所在的表。

  for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

  举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:

  create trigger auth_secure

  before insert or update or delete file://对整表更新前触发

  on auths

  begin

  if(to_char(sysdate,’DY’)=’SUN’

  RAISE_APPLICATION_ERROR(-20600,’不能在周末修改表auths’);

  ( RAISE_APPLICATION_ERROR是函数,括弧内的,第一参数范围在-20000~20999之间,第二个

  参数是字符串,大小在2k,超过的话,系统自动截断)

  end if;

  end

Oracle触发器中的:new和:old的使用

:new— 触发器执行过程中触发表作操作的当前行的新纪录

:old— 触发器执行过程中触发表作操作的当前行的旧纪录

我们在使用 :new 或者 :old 的操作时需要注意以下问题:

1、 必须是行级触发器,因为 :new 或者 :old 是当前触发表操作的当前行的新数据或者旧数据,所以必须在行级触发器中才能使用。否则编译时会出现错误。

2、 当触发器被不同事件触发时,需要注意:

  1. insert 触发操作 只有 :new
  2. delete 触发操作 只有 :old
  3. update 触发操作 都有。
  4. 如果违反上述操作中随意使用 :new 或者 :old 不会在编译时报错误但是会发现使用这两个关键字无效。

3、 使用触发器时如果要修改 :new 的值需要注意:

  1. 只有行级前触发器才能修改 :new 的值,而行级后触发器不可以。
  2. 因为行级前触发器是在本行 DML 操作之前,所以才能修改 :new 的值。从逻辑上说,也只有在这时修改才有意义。如果行级后触发器要试图修改 :new 的值会报变异错误。从逻辑上说后触发器的执行已经在本行 DML 操作,以后了,再修改 :new 的值已经不会对数据产生影响了。

4、 当在触发条件中使用 :new 或者 :old 的时候注意,只能直接写 old 或者 new ,不能带符号 ”:” 否则会出错。

  1. create or replace trigger TRI_PrintTest
  2. before delete or insert or update on TEST_EXAM  --触发事件
  3. for each row                  -- 每修改一行都需要调用此过程
  4. begin
  5. dbms_output.put_line(:new.IDNEW); --IDNEW字段更新后的值
  6. dbms_output.put_line(:old.IDNEW); --IDNEW字段更新前的值
  7. end;

原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/394/11720894.shtml

发表评论

表情:
评论列表 (有 0 条评论,536人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Oracle触发器

    一、定义:数据库触发器是一个与表相关联的,存储PLSQL程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,oracle自动地执行触

    相关 Oracle触发器

    触发器可以看做一种“特殊”的存储过程,它定义了一些与数据库相关事件(如INSERT、UPDATE、CREATE等事件)发生时应执行的“功能代码块”,通常用于管理复杂的完整性约束