[RESOLU] archiver avant d'effacer

Eléphanteau du PHP | 10 Messages

13 juin 2014, 13:58

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 : Tout sélectionner

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 : Tout sélectionner

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
j'ai aussi testé cela et je reçois la même erreur :

Code : Tout sélectionner

create or replace function archivage() returns trigger as $$ declare nometud varchar; prenometud varchar; numsta integer; titresta varchar; objetsta varchar; anneescol varchar; 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;
merci d'avance

Eléphanteau du PHP | 10 Messages

14 juin 2014, 14:06

personne ? ;(

Mammouth du PHP | 1339 Messages

14 juin 2014, 14:29

Tu as un champ numstage dans la table old ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 10 Messages

14 juin 2014, 14:44

j'ai une table qui s'appelle archive ou doivent etre enregistrées les données effacées :

Code : Tout sélectionner

create table archive( idstage serial primary key, nometudiant varchar, prenometudiant varchar, numstage integer, titrestage varchar, objetstage varchar, anneescolaire integer, numetudiant integer, regimeetudiant varchar, numcontact integer, numprofsuiveur integer, remarques varchar);

Mammouth du PHP | 1339 Messages

14 juin 2014, 14:48

Ouais c'est cool mais tu réponds pas a la question en fait ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 10 Messages

14 juin 2014, 14:52

lol desolée

je n'ai pas de table old mais dans mon trigger je lui dis bien que l'ancien numstage va dans la variable numsta

a moins que je ne comprenne pas ta question :)

Mammouth du PHP | 1339 Messages

14 juin 2014, 14:56

Autant pour moi alors mes compétences s'arrete a du simple SQL donc je passe mon tour !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 10 Messages

14 juin 2014, 14:58

je te remercie quand même pour ta réponse en espérant trouver la solution

bon weekend a toi :)