Bonjour je suis nouveau sur le forum et je poste ce message car je rencontre des problemes dans la realisation d'un trigger en pl/pgsql ayant pour but de mettre a jour une table par rapport a une autre quatiment identiques mais avec des champs dont certaines valeurs ont ete modifies a la main.
Pour tester mon trigger avant de le mettre en prod j'ai cree 2 tables "etudiant" et "student"
Et j'applique sur la table "etudiant" un trigger ayant pour but de mettre a jour les donnees de la table lors de chaque insertion en verifiant que les valeurs des champs de la table etudiant ayant un attribut "log*" identiques dans la table student soit identiques.
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 CREATE TABLE etudiant( logEtud VARCHAR(30) NOT NULL PRIMARY KEY, niveauEtud VARCHAR(30) DEFAULT 'normal', nameEtud VARCHAR(30), surnameEtud VARCHAR(30), alterEtud BOOLEAN DEFAULT FALSE, idClass INT REFERENCES classe(idClass) ); CREATE TABLE student( logStud VARCHAR(30) NOT NULL PRIMARY KEY, niveauStud VARCHAR(30) DEFAULT 'normal', nameStud VARCHAR(30), surnameStud VARCHAR(30), alterStud BOOLEAN DEFAULT FALSE, idClass INT REFERENCES classe(idClass) );
Mais apparemment je dois avoir une erreur quelque part car j'ai un message d'erreur lorsque j'essaie d'effectuer une insertion (le probleme intervient lors de l'insertion sur la table etudiant)
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 CREATE OR REPLACE FUNCTION process_maj_etudiant() RETURNS TRIGGER AS $$ DECLARE BEGIN -- En cas d'insertion mise a jour de la liste des etudiants -- par rapport aux elements communs des tables etudiant -- et student. IF (TG_OP = 'INSERT') THEN SELECT * FROM etudiant AS update_etudiant WHERE NEW.logEtud = student.logEtud; IF (update_etudiant <> 0) THEN UPDATE etudiant SET update_etudiant.niveauEtud = student.niveauStud, update_etudiant.alterEtud = student.alterStud, WHERE update_etudiant.logEtud = student.logStud; END IF; END IF; END; $$ LANGUAGE plpgsql; CREATE TRIGGER maj_etudiant AFTER INSERT ON etudiant FOR EACH STATEMENT EXECUTE PROCEDURE process_maj_etudiant();
le message d'erreur est le suivant : "ERROR: record "new" is not assigned yet"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 INSERT INTO student (logStud, nameStud, surnameStud, idClass, alterStud, niveauStud) VALUES('LogF', 'paf', 'test2', 1, TRUE, 'marche ok'); INSERT INTO student (logStud, nameStud, surnameStud, idClass, alterStud, niveauStud) VALUES('LogG', 'pouf', 'test3', 1, TRUE, 'marche ok'); INSERT INTO etudiant (logEtud, nameEtud, surnameEtud, idClass) VALUES('LogE', 'pif', 'test1', 1); INSERT INTO etudiant (logEtud, nameEtud, surnameEtud, idClass) VALUES('LogF', 'paf', 'test2', 1); INSERT INTO etudiant (logEtud, nameEtud, surnameEtud, idClass) VALUES('LogG', 'pouf', 'test3', 1);
Serait-il possible d'obtenir de l'aide car c'est aussi la premiere fois que je connais mieux mysql que pgsql et la realisation de ce trigger me pose enormement de probleme.
Merci d'avance
Partager