CREATEORREPLACETRIGGER DBAUSER.UPD_SURPLUS AFTER DELETEORINSERTORUPDATE ON DBAUSER.T_OVERTIME REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE countsum1 NUMBER; countsum2 NUMBER; countsum3 NUMBER; countsum4 NUMBER; countsum5 NUMBER; countsum6 NUMBER; /**//****************************************************************************** NAME: TUpdate_TSURPLUS PURPOSE: REVISIONS: Ver Date Author Description --------- ---------- --------------- ------------------------------------ 1.0 2007/01/13 zhoutao. Created this trigger. NOTES: Automatically available Auto Replace Keywords: Object Name: TUpdate_TSURPLUS Sysdate: 2007/01/13 Date and Time: 2007/01/13, AM 08:48:40, and 2007/01/13 AM 08:48:40 Username: (set in TOAD Options, Proc Templates) Table Name: T_OVERTIME (set in the "New PL/SQL Object" dialog) Trigger Options: (set in the "New PL/SQL Object" dialog) ******************************************************************************/ BEGIN countsum1:=0; countsum2:=0; countsum3:=0; countsum4:=0; countsum5:=0; countsum6:=0; IF INSERTING THEN SELECTCOUNT(*) INTO countsum1 FROM T_SURPLUS WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT ; IF countsum1>0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ELSIF countsum1=0THEN INSERTINTO T_SURPLUS(IDS,DATES,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,TO_CHAR(:NEW.PRTDATE,'MM/YYYY'),:NEW.VRTMSORT,:NEW.AHR); ENDIF; ELSIF UPDATING THEN --&&&&&*********&&&&&&&&&------ IF :NEW.VRTMSORT=:OLD.VRTMSORT THEN IF :NEW.AHR<>:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')<>TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN --矪耞囊э跑い毳骰Pセるぃ琌る计э跑暗猭 SELECTCOUNT(*) INTO countsum2 FROM T_SURPLUS WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT ; IF countsum2>0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ELSIF countsum2=0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; INSERTINTO T_SURPLUS(IDS,DATES,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,TO_CHAR(:NEW.PRTDATE,'MM/YYYY'),:NEW.VRTMSORT,:NEW.AHR); ENDIF; -----惫D挡 ELSIF :NEW.AHR=:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')<>TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN SELECTCOUNT(*) INTO countsum3 FROM T_SURPLUS WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT ; IF countsum3>0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ELSIF countsum3=0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; INSERTINTO T_SURPLUS(IDS,DATES,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,TO_CHAR(:NEW.PRTDATE,'MM/YYYY'),:NEW.VRTMSORT,:NEW.AHR); ENDIF; ELSIF :NEW.AHR<>:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+(:NEW.AHR-:OLD.AHR) WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ENDIF; --&&&&&*********&&&&&&&&&------ ELSIF :NEW.VRTMSORT<>:OLD.VRTMSORT THEN ----&&&&&&&&&&&&&&&*****************&&&&&&&&&&&&&&&&&---- IF :NEW.AHR<>:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')<>TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN SELECTCOUNT(*) INTO countsum4 FROM T_SURPLUS WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT ; IF countsum4>0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ELSIF countsum4=0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; INSERTINTO T_SURPLUS(IDS,DATES,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,TO_CHAR(:NEW.PRTDATE,'MM/YYYY'),:NEW.VRTMSORT,:NEW.AHR); ENDIF; ----&&&&&&&&&&&&&&&*****************&&&&&&&&&&&&&&&&&---- ELSIF :NEW.AHR=:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')<>TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN SELECTCOUNT(*) INTO countsum5 FROM T_SURPLUS WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT ; IF countsum5>0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; ELSIF countsum5=0THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; INSERTINTO T_SURPLUS(IDS,DATES,VRTM_SORT,SRPLS_HR) VALUES(:NEW.IDS,TO_CHAR(:NEW.PRTDATE,'MM/YYYY'),:NEW.VRTMSORT,:NEW.AHR); ENDIF; ELSIF :NEW.AHR<>:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:OLD.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; ELSIF :NEW.AHR=:OLD.AHR AND TO_CHAR(:NEW.PRTDATE,'MM/YYYY')=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR+:NEW.AHR WHERE T_SURPLUS.IDS=:NEW.IDS AND T_SURPLUS.DATES=TO_CHAR(:NEW.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:NEW.VRTMSORT; UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:OLD.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; ENDIF; ENDIF; ELSIF DELETING THEN UPDATE T_SURPLUS SET T_SURPLUS.SRPLS_HR=T_SURPLUS.SRPLS_HR-:OLD.AHR WHERE T_SURPLUS.IDS=:OLD.IDS AND T_SURPLUS.DATES=TO_CHAR(:OLD.PRTDATE,'MM/YYYY') AND T_SURPLUS.VRTM_SORT=:OLD.VRTMSORT; ENDIF; EXCEPTION WHEN OTHERS THEN -- Consider logging the error and then re-raise RAISE; END TUpdate_TSURPLUS;