Bonjour ,
je dois faire un trigger qui archive de 2 tables différentes avant d'effacer , j'ai donc crée une table pour archiver , mais lorsque que je lance la fonction que j'ai crée pour effacer cela me renvoie une erreur (ma fonction pour effacer fonctionne sans le trigger )
"ERREUR: l'enregistrement « old » n'a pas de champs « numstage »
CONTEXT: instruction SQL « insert into archive values (default,old.nometudiant,old.prenometudiant,old.numstage,old.titrestage,old.objetstage,old.anneescolaire,old.numetudiant,old.regimeetudiant,old.numcontact,old.numprofsuiveur,old.remarques) »
fonction PL/pgsql archivage(), ligne 6 à instruction SQL
instruction SQL « delete from etudiants where numetudiant = numero »
fonction PL/pgsql effacetudiant(character varying), ligne 14 à instruction SQL"
voici ma fonction pour effacer ainsi que mon trigger :
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 create or replace function effacetudiant(nometud varchar) returns void as $$ declare numero int; begin perform nometudiant from etudiants where nometudiant=nometud; if not found then raise exception 'l''etudiant % n''existe pas',$1; else select numetudiant into numero from etudiants where nometudiant = nometud; delete from periodes where numstage in (select numstage from stages where numetudiant = numero); delete from stages where numetudiant= numero; delete from etudiants where numetudiant = numero; raise notice 'l''etudiant % a été effacé',$1; return ; end if; end; $$ language plpgsql;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 create or replace function archivage1() returns trigger as $$ begin insert into archive values (default,old.nometudiant,old.prenometudiant,old.numstage,old.titrestage,old.objetstage,old.anneescolaire,old.numetudiant,old.regimeetudiant,old.numcontact,old.numprofsuiveur,old.remarques); return old; end; $$ language plpgsql;
si quelqu'un avait une petite idée
merci d'avance
Partager