`

触发器

 
阅读更多
create or replace trigger gxh_value_change_trigger --创建或替换 触发器
after insert on gams_assetcard --触发时机在插入数据之后
for each row --每行都触发 (默认的数据访问关键字 NEW 新数据 OLD 旧数据 例如: NEW.CARDSTATE)
begin --开始(begin 和 end 之间访问需要加':' 例如: :NEW.CARDSTATE)
case when inserting then --条件判断开始 当正在执行插入时
  case when (:NEW.CARDSTATE = '00' AND :NEW.YEWXLH = 1) then --第一个条件判断
       insert into gxh_value_change (RECID, OBJECTID, YEWXLH, BILLTIME, CARDSTATE, JIAZOLD, JIAZNEW, JIAZZJ) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, :NEW.JIZRQ, :NEW.CARDSTATE, 0, :NEW.JIAZ, :NEW.JIAZ);
  when (:NEW.CARDSTATE = '00' AND :NEW.YEWXLH > 1) then --其他条件判断
       insert into gxh_value_change (RECID, OBJECTID, YEWXLH, BILLTIME, CARDSTATE, JIAZOLD, JIAZNEW, JIAZZJ) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, :NEW.JIZRQ, :NEW.CARDSTATE, (select c.jiaz from gams_assetcard c where c.objectid = :NEW.OBJECTID and c.yewxlh = :NEW.YEWXLH - 1), :NEW.JIAZ, :NEW.JIAZ);
  end case; --条件判断结束
end case; --条件判断结束
end; --结束

--注意访问变量的方式 begin 和 end 之间 需要加冒号;begin 和 end 之外 则不需要加;
-- 多个条件判断 用 case when ()then 'sql语句'when () then 'sql语句' end case;



修改业务后的触发器

create or replace trigger gxh_value_change_trigger
after insert or update on gams_assetcard
for each row
declare

    tem_value_old number:=0;
    tem_orgunit_code varchar2(100);
    tem_orgunit_name varchar2(200);
    tem_assetclass_code varchar2(100);
    tem_assetclass_name varchar2(200);
    tem_assetclass_gb_code varchar2(100);
    tem_assetclass_gb_name varchar2(200);
    pragma autonomous_transaction;
   
begin
  select g.stdcode,g.stdname into tem_assetclass_gb_code,tem_assetclass_gb_name from gams_jc_assetsort_gb g where g.recid = :NEW.SORTGBID;
  select o.stdcode,o.stdname into tem_orgunit_code,tem_orgunit_name from md_org o where o.recid = :NEW.ORGUNIT ;
  select a.stdcode,a.stdname into tem_assetclass_code,tem_assetclass_name from gams_jc_assetclass a where a.recid = :NEW.ZICFLID;
 
  case
    when updating then
     
      case
        when (:OLD.AUDITSTATE = 1 AND :NEW.AUDITSTATE = 2 and :OLD.CARDSTATE = '00' and :OLD.YEWXLH = 1 and :OLD.ISLASTEST = 1) then
           insert into zczjk.gxh_value_change (RECID, OBJECTID, YEWXLH, YEWLX, BILLTIME, BILLCODE, ORGUNIT, CARDSTATE, JIAZOLD, JIAZNEW,JIAZZJ,CARDRECID,ZICMC,DANWMC,DANWBM,ZICFLBM,ZICFLMC,ZICDLBM,ZICDLMC) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, '00', :NEW.JIZRQ, :NEW.BILLCODE, :NEW.ORGUNIT, :NEW.CARDSTATE, 0, :NEW.JIAZ, :NEW.JIAZ,:NEW.RECID,:NEW.ZICMC,tem_orgunit_code,tem_orgunit_name,tem_assetclass_code,tem_assetclass_name,tem_assetclass_gb_code,tem_assetclass_gb_name);    
           commit;
        else
           commit;
      end case;
   
    when inserting then
     
      case
        when (:NEW.AUDITSTATE = 2 and :NEW.CARDSTATE = '00' and :NEW.YEWXLH > 1) then
         select c.jiaz into tem_value_old from gams_assetcard c where c.objectid = :NEW.OBJECTID and c.yewxlh = :NEW.YEWXLH - 1 ;
         insert into zczjk.gxh_value_change (RECID, OBJECTID, YEWXLH, YEWLX, BILLTIME, BILLCODE, ORGUNIT, CARDSTATE, JIAZOLD, JIAZNEW, JIAZZJ,CARDRECID,ZICMC,DANWMC,DANWBM,ZICFLBM,ZICFLMC,ZICDLBM,ZICDLMC) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, '10', :NEW.JIZRQ, :NEW.BILLCODE, :NEW.ORGUNIT, :NEW.CARDSTATE, tem_value_old, :NEW.JIAZ, :NEW.JIAZ - tem_value_old,:NEW.RECID,:NEW.ZICMC,tem_orgunit_code,tem_orgunit_name,tem_assetclass_code,tem_assetclass_name,tem_assetclass_gb_code,tem_assetclass_gb_name);
         commit;
        when (:NEW.AUDITSTATE = 2 and :NEW.CARDSTATE = '10') then
          insert into zczjk.gxh_value_change (RECID, OBJECTID, YEWXLH, YEWLX, BILLTIME, BILLCODE, ORGUNIT, CARDSTATE, JIAZOLD, JIAZNEW, JIAZZJ,CARDRECID,ZICMC,DANWMC,DANWBM,ZICFLBM,ZICFLMC,ZICDLBM,ZICDLMC) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, '20', :NEW.JIZRQ, :NEW.BILLCODE, :NEW.ORGUNIT, :NEW.CARDSTATE, :NEW.JIAZ, 0, 0 - :NEW.JIAZ,:NEW.RECID,:NEW.ZICMC,tem_orgunit_code,tem_orgunit_name,tem_assetclass_code,tem_assetclass_name,tem_assetclass_gb_code,tem_assetclass_gb_name);
          commit;
        when (:NEW.AUDITSTATE = 2 and :NEW.CARDSTATE = '13') then
          insert into  zczjk.gxh_value_change (RECID, OBJECTID, YEWXLH, YEWLX, BILLTIME, BILLCODE, ORGUNIT, CARDSTATE, JIAZOLD, JIAZNEW, JIAZZJ,CARDRECID,ZICMC,DANWMC,DANWBM,ZICFLBM,ZICFLMC,ZICDLBM,ZICDLMC) values (dna.new_recid, :NEW.OBJECTID, :NEW.YEWXLH, '30', :NEW.JIZRQ, :NEW.BILLCODE, :NEW.ORGUNIT, :NEW.CARDSTATE, :NEW.JIAZ, 0, 0 - :NEW.JIAZ,:NEW.RECID,:NEW.ZICMC,tem_orgunit_code,tem_orgunit_name,tem_assetclass_code,tem_assetclass_name,tem_assetclass_gb_code,tem_assetclass_gb_name);
          commit;
        else
          commit;  
      end case; 
     
    else
         commit ;
         
  end case;
end gxh_value_change_trigger;


---结构

case
  when 条件 then
    case
      when 条件 then
     
      when 条件 then

      else

    end case;
  when 条件 then
    case
      when 条件 then
     
      when 条件 then

      else

    end case;
  else

end case;
分享到:
评论

相关推荐

    Multisim仿真实验三 触发器_触发器_multisimd触发器_serviceq66_T触发器仿真_double34t_源

    本实验的主题围绕着“Multisim仿真实验三 触发器”,主要关注触发器的逻辑功能、触发器之间的转换以及如何利用JK触发器构建双向时钟脉冲电路。下面我们将详细探讨这些知识点。 首先,触发器是数字电路中的基本存储...

    mysql触发器之创建多个触发器操作实例分析

    本文实例讲述了mysql触发器之创建多个触发器操作。分享给大家供大家参考,具体如下: 这次记录的内容mysql 版本必须得是5.7.2+的哈,之前的会不好使的。废话不多说,咱们开始正文哈。 在mysql 5.7.2+版本之前,我们...

    RS触发器与SR触发器区别有哪些

    RS触发器和SR触发器是数字电路中常见的基本逻辑门,它们都是利用电子开关实现的信号存储电路,但它们之间存在一些基本的差异。理解这两者的区别,对于学习数字逻辑电路设计和分析是非常重要的。 RS触发器,全称为...

    触发器触发器触发器触发器

    在"触发器9.18触发器9.18触发器9.18触发器触发器9.18触发器9.18触发器9.18触发器"这个描述中,可能是在强调某个特定的事件或者场景,例如9月18日的数据库维护或者某个特定的触发器测试。 在大多数关系型数据库系统...

    mysql触发器之触发器的增删改查操作示例

    MySQL触发器是数据库管理系统提供的一种机制,用于在特定的数据操作(如INSERT、UPDATE、DELETE)发生之前或之后自动执行预定义的SQL语句。这些触发器可以用来实现复杂的业务规则,确保数据的一致性和完整性,或者...

    jk触发器波形图怎么画?主从jk触发器波形图

    JK触发器是一种广泛应用于数字电路设计中的基本单元,具有较强的通用性和稳定性。JK触发器的波形图绘制是理解其工作原理的关键步骤,尤其是在分析主从JK触发器的行为时。主从JK触发器由两个独立的JK触发器组成,一个...

    触发器与逻辑电路介绍

    在数字电路领域,触发器和逻辑电路是构建复杂数字系统的基础。触发器,特别是RS触发器和门控触发器,是时序逻辑电路的核心,它们能够记忆电路的状态,并根据输入信号的变化来更新这个状态。 1. **触发器**: - **...

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    Quartus 2 RS、D、JK、T、触发器实验报告 D触发器构成二分频、四分频电路

    在这个实验报告中,我们关注的是不同类型的触发器,包括RS、D、JK、T触发器,以及如何利用它们实现分频电路。 1. **RS触发器**: RS触发器是一种基本的无稳态触发器,由两个与非门或或非门以正反馈方式构成。当R和...

    oracle_触发器的种类和触发事件

    触发器可以分为四种类型:DML触发器、DDL触发器、替代触发器和数据库事件触发器。 DML触发器是定义在表上的触发器,由DML事件引发。DML事件包括INSERT、UPDATE和DELETE三种。DML触发器可以在 BEFORE 或 AFTER 触发...

    数据库实验6 触发器

    ### 数据库实验6:触发器 #### 一、实验背景及目标 本次实验的主要目的是让学生深入理解并掌握数据库触发器的使用方法。触发器是一种特殊类型的存储过程,它被自动执行,当特定事件(如数据的插入、更新或删除)...

    触发器实验报告.doc

    实验3主要探讨了四种类型的触发器:基本RS触发器、JK触发器、D触发器以及触发器间的相互转换。触发器作为基础的存储元件,其核心特性在于它们能维持两种稳定状态,代表二进制的0和1,并在特定条件下能够从一种状态...

    触发器分析应用实验报告

    实验报告“触发器分析应用”主要探讨了四种基本类型的触发器——RS触发器、JK触发器、D触发器以及地址寄存器,并通过VHDL描述和波形仿真进行了深入研究。以下是这些触发器的详细知识及应用: 1. RS触发器: RS...

    RS触发器原理图+Proteus仿真

    RS触发器,全称为“Reset-Set触发器”,是数字逻辑电路中的一种基本逻辑单元,主要用于数据存储和状态保持。它的主要特点是可以根据输入信号RS(复位和置位)来改变其输出状态,通常有两个输入端:R(Reset)和S...

    数字电路集成触发器功能测试及转换实验报告

    实验报告“数字电路集成触发器功能测试及转换”旨在深入理解和掌握数字电路中常见的几种触发器,包括RS、D、JK触发器以及三态触发器和锁存器的工作原理、功能测试方法和相互转换。实验由胡媛媛、郑三元等人编写,...

    rs触发器的逻辑功能

    RS触发器,全称为Reset-Set触发器,是数字电子技术中一类基础的存储元件。它属于顺序逻辑电路,主要用于存储一位二进制信息,即逻辑“1”或“0”。在数字系统中,RS触发器可以用作基本的存储单元和各种时序逻辑电路...

    mysql中触发器使用详解.docx

    MySQL中的触发器是一种数据库对象,它与特定的表相关联,并在对表执行INSERT、UPDATE或DELETE操作之前或之后自动执行预定义的SQL语句。触发器的主要作用是增强数据库的逻辑控制,确保数据完整性、记录操作日志以及...

    (Multisim数电仿真指导)D触发器及应用

    ### Multisim 数电仿真指导:D触发器及其应用 #### 实验背景及目标 本实验旨在通过使用Multisim软件进行数字电子技术的仿真,帮助学习者深入了解D触发器的功能及其在实际电路设计中的应用。实验的具体目标包括: ...

    JK触发器的EDA设计

    JK 触发器的 EDA 设计 JK 触发器是一种基本的数字电路触发器,广泛应用于数字电路设计中。JK 触发器的EDA设计是指使用hardware description language(HDL)编写JK触发器的数字电路模型,并使用电子设计自动化(EDA...

    边沿D触发器原理图+Proteus仿真

    边沿D触发器是数字电路中的重要组成部分,尤其在时序逻辑电路中起到关键作用。它是一种双稳态电路,其状态更新仅发生在特定的时钟边沿,通常是上升沿或下降沿,这也是其被称为“边沿D触发器”的原因。这种特性使得它...

Global site tag (gtag.js) - Google Analytics