1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步