Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 13-06-2014 21:40:56
- okayassu
- Membre
- Inscription : 08-03-2014
- Messages : 16
[SQL] archiver avant d'effacer
Bonsoir :)
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 )
je reçois cette erreur que je ne comprends pas :
ERREUR: l'enregistrement « old » n'a pas de champs « nometudiant »
CONTEXTE : instruction SQL « SELECT old.nometudiant »
fonction PL/pgsql archivage(), ligne 17 à affectation
instruction SQL « delete from periodes where numstage in
(select numstage from stages where numetudiant = numero) »
fonction PL/pgsql suppretudiant(character varying), ligne 11 à instruction SQL
ci dessous ma fonction pour effacer ainsi que mon trigger :
RETURNS void AS
$BODY$
declare
numero integer;
begin
select numetudiant into numero from etudiants
where nometudiant = etudiant;
IF NOT FOUND THEN
RAISE EXCEPTION 'etudiant % est inexistant',etudiant;
END IF;
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;
return ;
end;
$BODY$
LANGUAGE plpgsql ;
$$
declare
nometud varchar;
prenometud varchar;
numsta integer;
titresta varchar;
objetsta varchar;
anneescol date;
numetud integer;
regimeetud varchar;
numconta integer;
numprofsuiv integer;
remarque varchar;
begin
nometud:=old.nometudiant;
select nometudiant into nometud from etudiants where nometudiant=nometud;
prenometud:=old.prenometudiant;
select prenometudiant into prenometud from etudiants where prenometudiant=prenometud;
numsta:=old.numstage;
select numstage into numsta from stages where numstage=numsta;
titresta:=old.titrestage;
select titrestage into titresta from stages where numstage=numsta;
objetsta:=old.objetstage;
select objetstage into objetsta from stages where numstage=numsta;
anneescol:=old.anneescolaire;
select anneescolaire into anneescol from stages where numstage=numsta;
numetud:=old.numetudiant;
select numetudiant into numetud from stages where numstage=numsta;
regimeetud:=old.regimeetudiant;
select regimeetudiant into regimeetud from stages where numstage=numsta;
numconta:=old.numcontact;
select numcontact into numconta from stages where numstage=numsta;
numprofsuiv:=old.numprofsuiveur;
select numprofsuiveur into numprofsuiv from stages where numstage=numsta;
remarque:=old.remarques;
select remarques into remarque from stages where numstage=numsta;
insert into archive values (default,nometud,prenometud,numsta,titresta,objetsta,anneescol,numetud,regimeetud,numconta,numprofsuiv,remarque);
return old;
end;
$$
language plpgsql;
create trigger archivage before delete on stages
for each row execute procedure archivage();
create trigger archivage before delete on etudiants
for each row execute procedure archivage();
create trigger archivage before delete on periodes
for each row execute procedure archivage();
si quelqu'un avait une petite idée de l'erreur ?
merci d'avance
Hors ligne
Pages : 1