论坛首页 综合技术论坛

PL/SQL9_触发器

浏览 2915 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-07-04  

一、触发器概念:(Trigger):
   是一种命名的PL/SQL块,是针对特定事件自动触发的。触发器不能接收参数。
   是基于表、视图、方案、数据库级别的。
二、为什么使用触发器。  
   通常可以实现一些审计的操作。
三、触发器类型:
    1\DML触发器:当在数据库上做DML操作时建立的触发器。  
    2、DDL触发器:当在数据库上做DDL操作时建立的触发器。  
    3、系统事件触发器:当实例系统、关闭、用户登陆、登出等操作时建立的触发器。
四、DML触发器:
  1、DML语句级触发器:当在一个表上做某个DML操作时,触发器体本身的语句被自动执行1次。
     创建语法:
     create Or Replace Trigger 触发器名 [before|After] [Insert|Update|Delete] On
     表名 PL/SQL块。
     说明:before|After,触发时间。before表示触发器体内的语句在DML操作之前执行,After表示之后执行。
     [Insert|Update|Delete] :触发事件
     PL/SQL块,如果有变量声明部分,需要以declare关键字开头。
     在触发器里不能包含事物结束的语句。
                          
  2、DML行级别触发器: 当在一个表上做某个DML操作时,触发器体本身的语句根据DML操作所影响的行数
     来决定执行多少次。
    
     create Or Replace Trigger 触发器名 [before|After] [Insert|Update|Delete] On
     表名 For Each Row
      PL/SQL块。
Create table audit_emp_table(
    user_name         varchar2(10),
    timestamp        date,
        old_empno        number(10),
    new_empno    number(10),
    old_ename        varchar2(10),
    new_ename    varchar2(10),
    old_job        varchar2(10),
        new_job        varchar2(10),
    old_sal        number(7,2),
    new_sal    number(7,2));
CREATE OR REPLACE TRIGGER audit_emp_values
AFTER DELETE OR INSERT OR UPDATE ON emp
FOR EACH ROW
BEGIN
  INSERT INTO audit_emp_table (user_name, timestamp,
    old_empno,new_empno,old_ename, new_ename, old_job,
    new_job, old_sal, new_sal)
  VALUES (USER, SYSDATE, :OLD.empno,:NEW.empno,
    :OLD.ename, :NEW.ename, :OLD.job,
     :NEW.job, :OLD.sal, :NEW.sal );
END;

Select * From audit_emp_table

Update emp Set sal = sal;
Commit

   发表时间:2011-07-07  
给力----
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics