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