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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
CREATE OR REPLACE TRIGGER TRIG_UPDT_SAPRECRUITTRANS
AFTER UPDATE
ON SAPRECRUITMENTTRANSFER
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
STANDBY_STATUS NUMBER(4);
BIGGER_DATE DATE;
BIGGER_DATE_NB NUMBER(4);
record_key VARCHAR2(200);
MAX_CANDIDAT_ID NUMBER(4);
BEGIN
-- defini la clé l'enregistrement en cours
record_key := 'CANDIDAT ID :' || :OLD.candidat_id|| ' / REQUESTOR : ' || :OLD.requestor;
--Vérifie que le status de départ est bien 0
-- et qu'on l'udpdate vers une autre valeur que 1
IF /*(:OLD.STATUS = 0) AND */:NEW.status = 1
THEN
--Compte le nombre de record ayant un status égal à 8 (StandBy)
SELECT COUNT(*) INTO STANDBY_STATUS
FROM SAPRECRUITMENTTRANSFER
WHERE status=8;
IF STANDBY_STATUS > 0
THEN
--Récupère la date la plus ancienne des records en StandBy
SELECT MIN(request_date) INTO BIGGER_DATE
FROM SAPRECRUITMENTTRANSFER
WHERE status=8;
--Récupère le nombre de record dont la date min est égale
SELECT COUNT(*) INTO BIGGER_DATE_NB
FROM (SELECT MIN(request_date)
FROM SAPRECRUITMENTTRANSFER
WHERE status=8);
IF BIGGER_DATE_NB > 1
THEN
--Récupére le plus petit des candidat_id s'il ya plusieurs
--dates max
SELECT MIN(CANDIDAT_ID) INTO MAX_CANDIDAT_ID
FROM SAPRECRUITMENTTRANSFER
WHERE STATUS=8;
--update le record de 8 à 0
UPDATE SAPRECRUITMENTTRANSFER
SET STATUS=0
WHERE REQUEST_DATE=BIGGER_DATE
AND CANDIDAT_ID=MAX_CANDIDAT_ID
AND CANDIDAT_ID <> :OLD.CANDIDAT_ID;
ELSE
--update le record de 8 à 0
UPDATE SAPRECRUITMENTTRANSFER
SET STATUS=0
WHERE REQUEST_DATE=BIGGER_DATE
AND CANDIDAT_ID <> :OLD.CANDIDAT_ID;
END IF;
END IF;
END IF;
--
-- EXCEPTION
-- WHEN OTHERS THEN
-- INSERT INTO SAPTRIGGERTRANSFER(TRIGGER_NAME, RECORD_KEY, ERROR_DATE, ERROR_TIME)
-- VALUES ('TRIG_UPDT_SAPRECRUITTRANS',record_key,SYSDATE,DBMS_UTILITY.GET_TIME);
END TRIG_UPDT_SAPRECRUITTRANS; |
Partager