Bonjour a tous,
Je dois créer un trigger qui doit metre à jour une table principale depuis une table temporaire( les champs des deux tables étant similaires).
-si un matricule est déja présent dans la table principale alors on fait une mise a jour dans cette table avec les valeurs de la table temporaire.
-si un matricule n'est pas présent alors on fait une insertion dans la table principale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Mes erreurs générées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
32/4     PL/SQL: SQL Statement ignored
32/40    PL/SQL: ORA-00907: parenthèse de droite absente
Je croyais pouvoir faire directement un UPDATE entre les deux tables mais après pas mal de recherches je n'ai rien trouvé, du moins rien qui aille avec mon contexte!

J'aimerais que l'on m'éclaircisse s'il vous plait.