• 一个Oracle触发器的示例


    CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder
    for each row
    
      declare
      para_PlanState csdbuser.t_pd_plan.planstate%type;
      para_WoRunCnt int;
    BEGIN
      --计划状态
      select PlanState into para_PlanState from T_PD_Plan where PlanID=:new.planid;
    
      --1 工单: 锁定1 -> 下载完毕2
      if(:old.wostate='1' and :new.wostate='2') then
         if(para_PlanState='1') then
            --计划状态由 制定1 变为 下载3
            update T_PD_Plan SET PlanState='3' where PlanID=:new.planid;
          end if;
      --2 工单: 下载完毕2 -> 执行3
      elsif (:old.wostate='2' and :new.wostate='3') then
         if(para_PlanState='3') then
          --计划状态由 下载3 变为 执行4
          update T_PD_Plan SET PlanState='4',FactStartTime=sysdate where PlanID=:new.planid;
        end if;
      --3 工单: 执行3 -> 完成4
      elsif (:old.wostate='3' and :new.wostate='4') then
        select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='1' or WOState='2' or WOState='3');
        --计划状态由 执行4 变为 完成5
        if(para_PlanState='4' and para_WoRunCnt=0) then
          update T_PD_Plan SET PlanState='5',FactEndTime=sysdate where PlanID=:new.planid;
        end if;
      --4 工单: 锁定1或下载完成2 -> 废弃5
      elsif((:old.wostate='1' or :old.wostate='2') and :new.wostate='5') then
        select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='1' or WOState='2' or WOState='3');
         if(para_PlanState='4' and para_WoRunCnt=0) then
          --计划状态由 执行4 变为 完成5
          update T_PD_Plan SET PlanState='5',FactEndTime=sysdate where PlanID=:new.planid;
        end if;
      --5 工单: 下载完成2 -> 锁定1
      elsif(:old.wostate='2' and :new.wostate='1') then
        --获取工单 执行 或 完成 的数量
        select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='3' or WOState='4');
         if(para_WoRunCnt=0) then
          --计划没有对应执行或完成的工单,清空计划开始和结束时间
          update T_PD_Plan SET PlanState='3',FactStartTime=null,FactEndTime=null where PlanID=:new.planid;
        end if;
        --获取工单 执行 或 完成 的数量
        select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='3' or WOState='4' or WOState='2');
        if(para_WoRunCnt=0) then
          --没有 下载完毕2,运行3,完成4 的工单,计划变为 制定1状态
          update T_PD_Plan SET PlanState='1' where PlanID=:new.planid;
        end if;
      end if;
    END WoStateChange;
    

      

  • 相关阅读:
    Leetcode143. Reorder List重排链表
    Leetcode93. Restore IP Addresses复原IP地址
    Leetcode92. Reverse Linked List II反转链表
    Leetcode970. Powerful Integers强整数
    Leetcode931. Minimum Falling Path Sum下降路径最小和
    2019个人计划与Flag与期望
    排查问题-查看日志的正确打开方式
    Vuex-状态管理模式
    Git 常用操作(二)
    Hive:HQL和Mysql:SQL 的区别
  • 原文地址:https://www.cnblogs.com/gsk99/p/4763428.html
Copyright © 2020-2023  润新知