Bonjour a tous,
c'est la première fois que je fais un post sur ce forum donc pardonnez moi si je fais des erreurs dans l'énonciation de mon problème.
Donc j'ai créé un trigger pour faire une mise a jour entre 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=oracle8]CREATE OR REPLACE TRIGGER updateTempGest
AFTER INSERT ON TEMP
FOR EACH ROW
DECLARE cpt, cpt1, cpt2, cpt3 int := 1;
nbreElement int := 'SELECT count(*) FROM GEST';
ligneGest GESTOR.matr_gest%TYPE;
ligneTemp TEMP.matr_gest%TYPE;
TYPE codeGest IS TABLE OF VARCHAR(10) INDEX BY BINARY_INTEGER;
tabGest codeGest;
tabTemp codeGest;
CURSOR lectGest IS SELECT matr_gest FROM GESTOR;
CURSOR lectTemp IS SELECT matr_gest FROM TEMP;
BEGIN
OPEN lectGest;
OPEN lectTemp;
FOR cpt 1..nbreElement LOOP
FETCH lectTemp INTO ligneTemp;
tabTemp(cpt) := ligneTemp;
END LOOP;
FOR cpt1 1..nbreElement LOOP
FETCH lectGest INTO ligneGest;
tabGest(cpt1) := ligneGest;
END LOOP;
FOR cpt2 1..nbreElement LOOP
FOR cpt3 1..nbreElement LOOP
IF tabTemp(cpt2) = tabGest(cpt3) THEN
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;
CLOSE lectTemp;
END;[/code]
L'erreur s'affichant suite à
[code=oracle8]SHOW ERRORS;[/code]
[code=oracle8]1/12 PLS-00103: Symbole "," rencontré à la place d'un des symboles
suivants :
constant exception <identificateur>
<identificateur entre guillemets> table LONG_ double ref char
time timestamp interval date binary national character nchar
1/35 PLS-00103: Symbole "=" rencontré à la place d'un des symboles
suivants :
) ,[/code]
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.