oracle表触发器


create or replace trigger tr_kp_firetool

       after insert or update or delete   on kp_firetool
  for each row


       
begin
         if inserting then
           if(:new.tool_state='valid') then
              update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum + 1
                where t.type_id = :new.tool_type;
           end if;     
         elsif updating then
            if(:new.tool_type = :old.tool_type and :new.tool_state != :old.tool_state) then
                --如果类型没有修改,状态修改了
                if (:old.tool_state!='valid' and :new.tool_state='valid') then
                  --无效改为有效 
                  update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum + 1 where t.type_id = :new.tool_type;
                else
                  --有效改无效
                  update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum - 1 where t.type_id = :new.tool_type;
                end if;  
            elsif(:new.tool_type != :old.tool_type and :new.tool_state = :old.tool_state) then
                -- 如果修改了类型,状态没有修改
                 if (:new.tool_state='valid') then
                    update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum + 1 where t.type_id = :new.tool_type;
                 end if; 
            elsif(:new.tool_type != :old.tool_type and :new.tool_state != :old.tool_state) then
                --如果修改了类型,也修改状态
                if(:old.tool_state='valid' and :new.tool_state != 'valid') then
                 --有效改为无效
                    update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum - 1 where t.type_id = :old.tool_type;
                else
                    --无效改有效    
                    update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum + 1 where t.type_id = :new.tool_type;    
                end if;        
            end if;    
         elsif deleting then
            if(:old.tool_state='valid') then
               --如果删除的记录是有效
            update kp_firetool_type t set t.type_toolnnum = t.type_toolnnum - 1 where t.type_id = :old.tool_type;
            end if;   
         end if;
end;

你可能感兴趣的:(oracle表触发器)