关于触发器

原创 2011年01月19日 10:56:00

 DML触发器

语句触发器:当执行DML语句时被隐含执行的触发器
语法: create (or replace) trigger t_update_A
       {BEFORE| AFTER } EVENT1  [OR EVENT2 OR EVENT3]
       ON TABLE_NAME
       pL/SQL block;

eg: 
        create or replace trigger tr_sec_emp
         before insert or update or delete on emp
        begin
            if  to_char(sysdate,'DY','nls_date_language=AMERICAN')
               IN  ('SAT','SUN') THEN
             raise_application_error(-20001,'不能在休息日改变雇员信息');
            end if;
            end;

行触发器-----当执行DML语句时,每作用一行被触发一次的触发器,当使用DML语句触发器时,
              不能记录列数据的变化,为了审计表数据的变化,就需要使用行触发器

eg:   create or replace trigger tr_emp_sal
       before update of sal on emp
      for each row
       begin
         if  :new.sal<:old.sal then
          raise_application_error(-20010,'工资只涨不降');
        end if;
        end;

限制行触发器:-----在特定条件下执行行触发器,需要使用When子句对触发条件加以限制,
  (下面以审计岗位salesman的雇员工资变化为例)
eg:  create or replace trigger  tr_sal_change
      after update or sal  on emp
      for each row
      when (old.job='salesman')
      declare
          v_temp int;
       begin
        select count(*) into v_temp from audit_emp_change where name=:old.ename;
       if v_temp=0 then
           insert into audit_emp_change
         values(:old.ename,:old.sal,:new.sal,sysdate);
        else
           update audit_emp_change
               set oldsal_:old.sal,newsal=:new.sal, time=sysdate
           where name=:old.ename;
          end if;
       end;

 

 

eg:

     

CREATE TRIGGER after_IQC_Inspection 
 after insert on iqcm.iqc_inspection
 for each row
declare
 v_specid iqc_spec.id%type;
 v_subclassno iqc_spec.subclassno%type;
 
 --??????
 v_plant iqc_inspec_set.plant%type;
 v_grade iqc_inspec_set.geadeno%type;
 v_methodno iqc_inspec_set.methodno%type;
 v_countaql iqc_inspec_set.countaql%type;
 v_methodno_jl  iqc_inspec_set.measure_methodno%type;
begin

     --?????????
    
     declare cursor acc_cursor is
             select y.plant,y.geadeno,y.methodno,y.measure_methodno,y.countaql  
             from iqc_inspec_set y
             where y.plant=trim(:new.plant) and y.p_no=trim(:new.p_no);          
    begin
         open acc_cursor;
              fetch acc_cursor into v_plant,v_grade,v_methodno,v_methodno_jl,v_countaql;
         close acc_cursor;
    end;
                       
     --??????????
     declare cursor mycursor1 is
     select a.id,a.subclassno from iqc_spec a where exists
     (select b.specid from iqc_inspec_execute_spec b
             where b.specid=a.id and b.executeid=trim(:new.executeid));
     begin
     open mycursor1;
         
     fetch mycursor1 into v_specid,v_subclassno;
     while mycursor1%found  
         
     loop
    
         --???????? AQL,???? 
         if (v_subclassno<3) then
            insert into iqc_lot_info (stutasid,subclassno,spec_id,grade_no,method_no,acc_aql,plant)
            values(:new.id,v_subclassno,v_specid,v_grade,v_methodno,v_countaql,v_plant);
         else
             insert into iqc_lot_info (stutasid,subclassno,spec_id,method_no,plant)
             values(:new.id,v_subclassno,v_specid,v_methodno_jl,v_plant);
         end if;
         
         fetch mycursor1 into v_specid,v_subclassno;
         
     end loop;
     close mycursor1;
     end;
    
     --?????????
     insert into iqc_lot_info (stutasid,subclassno,spec_id,plant)
     values(:new.id,0,'F590039595F758E1E030850A6382459B',v_plant);
 
     --?????????????????
     insert into iqc_check (stutasid,subclassno,spec_id)
     values(:new.id,0,'F590039595F758E1E030850A6382459B');
    

     --dbms_output.put_line(v_plant||v_grade||v_mothod||v_countaql);
    
end;

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MySQL触发器的使用说明

  • 2017-09-20 14:34
  • 435B
  • 下载

mysql觸發器使用.pptx

  • 2016-03-02 14:35
  • 1.71MB
  • 下载

oracle学习笔记_触发器

触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。 功能: 1、 允许/限制对表的修改 2、 自动生成派生列,比如自增字段 3、 强制数据一致...

数据库触发器学习

  • 2015-09-23 22:41
  • 176KB
  • 下载

寻找JK触发器清零端

sqlite3 触发器(分数和绩点同步更新)

效果是插入或者修改学生成绩,学生的绩点会自动发生合理的更变,更变规则:如果分数小于60分,绩点为0,如果分数大于60分则绩点=(分数-50)/10*学分;下面是触发器(四个)的实现: 1.这是表结构 ...

Orcale触发器,简单易懂

  • 2017-08-25 17:13
  • 200KB
  • 下载

认识FPGA触发器的亚稳态

边沿型触发器的输出有两个稳定状态: 高电平或者低电平。为保证可靠操作, 必须要满足触发器的时序要求,也就是我们熟知的建立时间和保持时间。如果输入信号违反了触发器的时序要求, 那么触发器的输出信号就有可...

详解触发器

  • 2014-09-02 22:17
  • 644KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)