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"
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)
);
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
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();
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
 
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);
le message d'erreur est le suivant : "ERROR: record "new" is not assigned yet"

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