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