`

触发器

 
阅读更多
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;
分享到:
评论

相关推荐

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

    触发器9.18触发器9.18触发器9.18触发器触发器9.18触发器9.18触发器9.18触发器

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

    初步学习Quartus软件时,了解各种触发器的机理、用软件进行仿真,看波形图。 Dff芯片 集成d 触发器,单独触发器 7474芯片D触发器 74112 J、K触发器 Tff T触发器 二分频触发器:时钟每触发2个周期时,电路输出1个周期...

    触发器实验报告.doc

    实验3 触发器及其应用 一、实验目的 1、掌握基本RS、JK、D和T触发器的逻辑功能 2、掌握集成触发器的逻辑功能及使用方法 3、熟悉触发器之间相互转换的方法 二、实验原理 触发器具有两个稳定状态,用以表示逻辑状态"1...

    sakila数据库触发器的理解 基于sakila的触发器的设计

    sakila数据库触发器的理解 基于sakila的触发器的设计 PDF中包括: 1. 观察 sakila.mwb 并回答问题 1.1图中共有几个 View 1.2分析以下 3 个视图,回答以下问题: 2.观察 sakila-schema.sql 和 sakila-data.sql 并回答...

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

    初步学习Quartus软件时,了解各种触发器的机理、用软件进行仿真,看波形图。 Dff芯片 集成d 触发器,单独触发器 7474芯片D触发器 74112 J、K触发器 Tff T触发器 二分频触发器:时钟每触发2个周期时,电路输出1个周期...

    SQL Server数据库实验_存储过程与触发器设计.docx

    SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。...

    Gbase 8s触发器介绍.doc

    GBase 8s 触发器介绍 GBase 8s 触发器是一种存储过程,可以在进行 DML/DQL 操作时自动执行相应的语句。触发器可以用于维护多表之间的数据一致性。 触发器的优点 触发器的主要优点在于其自动响应的特性,对表的增/...

    数字逻辑实验报告二基本触发器.docx

    1、熟悉基本RS触发器和可控RS触发器功能; 2、熟悉集成的D触发器、JK触发器的功能; 3、初步应用D触发器和JK触发器实现简单功能电路。 二、实验内容及步骤 (一)构建一个由与非门构成的基本RS触发器,如图1所示。用...

    实验4答案-触发器.sql

    触发器程序设计 2 通过本实验的学习,使学生掌握握触发器程序的设计和使用。 二、实验内容 说明:使用银行贷款数据库。 1、新建一个贷款记录统计表LoanNum,存放每一个法人单位的贷款次数。为LoanT表创建一...

    D触发器原理-D触发器电路图

    "D 触发器原理-D 触发器电路图" D 触发器是一种边沿触发器,具有接收并记忆信号的功能,又称为锁存器。它属于脉冲触发方式,不存在约束条件和一次变化现象。边沿 D 触发器的工作原理是,在 CP 高电平期间输入信号,...

    Oracle中通过触发器来追踪用户的活动

    从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...

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

    1、测试D触发器的逻辑功能。2、触发器之间的相互转换。3、用JK触发器组成双向时钟脉冲电路,并测试其波形。

    D触发器构成的余3码计数器数电课设报告 23.pdf

    D触发器构成的余3码计数器数电课设报告 23.pdfD触发器构成的余3码计数器数电课设报告 23.pdfD触发器构成的余3码计数器数电课设报告 23.pdfD触发器构成的余3码计数器数电课设报告 23.pdfD触发器构成的余3码计数器数电...

    MySQL数据库:触发器举例.pptx

    触发器举例 1)掌握——触发器的应用; 课程目标 PART ONE 触发器举例 【例】 创建一个触发器,当修改Sell表中订购册数时,如果修改后的订购册数小于5本,则触发器将该对应的折扣修改为1,否则,折扣修改为0.8。 ...

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

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

    个人亲测oracle触发器调用java程序

    Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中的一种机制,可以在数据库中执行特定的操作。在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到...

    主从触发器和边沿触发器的特点

    边沿触发器:只有在时钟脉冲CP上升沿或下降沿时刻接收输入信号,电路状态才发生翻转,而在CP的其它时间内,电路状态不会发生变化的触发器。 由于只在时钟上升沿或下降沿接收输入信号,因此提高了触发器的可靠性和抗...

    触发器例程,关于触发器的使用

    触发器的一些例子,可以快速的使用触发器进行数据库编程

    可编程硬件描述语言VHDL Quartus 同步D触发器源代码.pdf

    VHDL Quartus 同步D触发器源代码 --2015/11/25 --同步D触发器 LIBRARY IEEE; --调用库 USE IEEE.STD_LOGIC_1164.ALL; --库文件 USE IEEE.STD_LOGIC_UNSIGNED.ALL; --库文件 ---------------------------------------...

Global site tag (gtag.js) - Google Analytics