看了书上写得触发器的例子,看半天也没看懂什么意思,到底触发器有什么用?请高手解释一下,最好留下个例子,谢谢大家喔

解决方案 »

  1.   

    触发器建在表上,当表insert,update,delete等操作时可以自动触发操作一些动作,满足你的需求.
    可以找本书看看,介绍的很详细
      

  2.   

    例子:用TRIGGER记录的工资变化。
    比如有一个工资表SALARY记录公司每个人的工资,想在每次修改工作时都记录到日志表SALARY_HISTORY,这当然可以用程序实现,但是如果用trigger就省去应用编程。
    工资表
    CREATE TABLE salary(
    empno int primary key, --员工ID
    salary int --工资
    );CREATE TABLE salary_history(
    empno int,  --员工ID
    modify_time date, --修改日期 
    salary int    --修改后的工资
    );生成trigger
    CREATE OR REPLACE TRIGGER tri_salary
    AFTER INSERT OR UPDATE OF salary ON salary
    FOR EACH ROW
    BEGIN
        insert into salary_history(empno,modify_time,salary) values(:new.empno,sysdate,:new.salary);
    END;
    /
    测试
    insert into salary values(1,1000);
    update salary set sal=2000 where empno=1;
    commit;
    select * from salary_history;
      

  3.   


    借花献佛刚好回答了一个有关触发器的例子,看看这个贴,里面有例子,还有一个场景。还有一些潜在的小知识http://topic.csdn.net/u/20090704/20/49c38a59-beaa-4fe2-8a84-b48f8042cc74.html?141
      

  4.   

    触发器是一种特殊类型的PL/SQL存储过程。在这个表中执行insert、update和delete等语句时,触发器被oracle触发。 
      

  5.   

    这下肯定很明了了,看看书,知道trigger的书写格式就好了,然后自己多手动创建几个试试,慢慢就上手了
      

  6.   

    功能: 
    1、 允许/限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致性 4、 提供审计和日志记录 5、 防止无效的事务处理 6、 启用复杂的业务逻辑 开始 
    create trigger biufer_employees_department_id 
           before insert or update 
                  of department_id 
                  on employees
           referencing old as old_value 
                           new as new_value 
          for each row 
           when (new_value.department_id<>80 ) 
    begin 
           :new_value.commission_pct :=0; 
    end; 
    / 触发器的组成部分: 
    1、 触发器名称 2、 触发语句 3、 触发器限制 4、 触发操作 1、 触发器名称 
    create trigger biufer_employees_department_id 命名习惯: 
    biufer(before insert update for each row) employees 表名 department_id 列名 2、 触发语句 
    比如: 表或视图上的DML语句 
    DDL语句 
    数据库关闭或启动,startup shutdown 等等 
    before insert or update 
                  of department_id 
                on employees 
           referencing old as old_value 
                           new as new_value 
           for each row 

    说明: 
    1、 无论是否规定了department_id ,对employees表进行insert的时候 2、 对employees表的department_id列进行update的时候 3、 触发器限制 when (new_value.department_id<>80 ) 限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。 
    其中的new_value是代表更新之后的值。 
    4、 触发操作 是触发器的主体 
    begin 
           :new_value.commission_pct :=0; 
    end; 
    主体很简单,就是将更新后的commission_pct列置为0 

    触发: 
    insert into employees(employee_id, 
    last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) 
    values( 12345,’Chen’,’Donny’, sysdate, 12, ‘[email protected]’,60,10000,.25); 
    select commission_pct from employees where employee_id=12345; 
    触发器不会通知用户,便改变了用户的输入值。 触发器类型: 
    1、 语句触发器 2、 行触发器 3、 INSTEAD OF 触发器 4、 系统条件触发器 5、 用户事件触发器