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
   |  
CREATE OR REPLACE TRIGGER updateTempGest
AFTER INSERT ON TEMP
FOR EACH ROW
 
DECLARE cpt int := 1;
		cpt1 int := 1;
		cpt2 int := 1;
		cpt3 int := 1;
		nbreElement int := "SELECT count(*) FROM GEST";		/*récupération du nombre d'élément dans la table GESTOR*/
		ligneGest GESTOR.matr_gest%TYPE;		/*nomTable%TYPE = meme type que le champ de la table*/
		ligneTemp TEMP.matr_gest%TYPE;
		TYPE codeGest IS TABLE OF VARCHAR(10) INDEX BY BINARY_INTEGER;		/*création d'un type de tableau*/
		tabGest codeGest;		/*déclaration d'un tableau*/
		tabTemp codeGest;
		CURSOR lectGest IS SELECT matr_gest FROM GESTOR;		/*création d'un curseur parcourant la table GEST*/
		CURSOR lectTemp IS SELECT matr_gest FROM TEMP;
 
BEGIN
	OPEN lectGest;		/*ouverture du curseur*/
	OPEN lectTemp;
 
	/*récupération de tous les matricules de la table TEMP pour insérer dans un tableur*/
	FOR cpt IN 1..nbreElement LOOP
		FETCH lectTemp INTO ligneTemp;		/*passage à la ligne suivante*/
		tabTemp(cpt) := ligneTemp;			/*enregsitrement de la valeur du matricule dans une case du tableau*/
	END LOOP;
 
	FOR cpt1 IN 1..nbreElement LOOP
		FETCH lectGest INTO ligneGest;
		tabGest(cpt1) := ligneGest;
	END LOOP;
 
	FOR cpt2 IN 1..nbreElement LOOP
		FOR cpt3 IN 1..nbreElement LOOP
			IF (tabTemp(cpt2) = tabGest(cpt3)) THEN		/*comparaison de chaque matricule des deux tableaux*/
			UPDATE GESTOR SET 	(GESTOR.nom_gest := TEMP.nom_gest,
								GESTOR.prenom_gest := TEMP.prenom_gest,
								GESTOR.secteur_gest := TEMP.secteur_gest,
								GESTOR.code_gest := TEMP.code_gest,
								GESTOR.secteur1_gest := TEMP.secteur1_gest,
								GESTOR.codeSecteur_gest := TEMP.codeSecteur_gest,
								GESTOR.codeInc_gest := TEMP.codeInc_gest,
								GESTOR.codeID_gest := TEMP.codeID_gest,
								GESTOR.codeNom_gest := TEMP.codeNom_gest,
								GESTOR.dateEmbauche_gest := TEMP.dateEmbauche_gest)
			WHERE tabGest(cpt2) = tabTemp(cpt3);
			ELSE
				INSERT INTO GESTOR VALUES (TEMP.matr_gest,TEMP.nom_gest,TEMP.prenom_gest,TEMP.secteur_gest,TEMP.code_gest,TEMP.groupe_gest,TEMP.secteur1_gest,TEMP.codeSecteur_gest,TEMP.codeInc_gest,TEMP.codeID_gest,TEMP.codeNom_gest,TEMP.dateEmbauche_gest);
			END IF;
			cpt3 := cpt3 + 1;
		END LOOP;
		cpt2 := cpt2 + 1;
	END LOOP;
 
	CLOSE lectGest;		/*fermeture du curseur*/
	CLOSE lectTemp;
 
END;  | 
Partager