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