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;