Vous n'êtes pas identifié(e).
Pages : 1
salut ! je suis nouveau sur le forum. Et je suis nouveau également dans l'utilisation de postgresql.
Je veux utiliser un trigger pour inserer des données dans une table (que je nomme nouveau_depart) de ma BD après insertion des donées dans une autre table qui est nommée eleve (qui a pour colonnes : NOM, PRENOM, NUM, CLASSE ). Les colonnes de la table nouveau_depart sont NOM_C, PRENOM_C, NUM_C, CLASSE_C
j'utilise pgAdmin3. Dans ma fonction trigger , j'utilise le code suivant:
begin
INSERT INTO nouveau_depart
VALUES (NEW.NOM, NEW.PRENOM, NEW.NUM, NEW.CLASSE);
RETURN NEW;
end;
ensuite la creation du trigger sur ma table eleve me donne ceci:
CREATE TRIGGER insert_after_eleve
AFTER INSERT ON eleve
FOR EACH ROW
EXECUTE PROCEDURE ft_eleve;
Mais lorsqu' une insertion veut se faire dans la table eleve, le message d'erreur suivant apparait:
une erreur s'est produite:
" ERREUR: l'enregistrement "new" n'a pas de champs "nom"
CONTEXT: SQL statement "INSERT INTO nouveau_depart
VALUES (NEW.NOM, NEW.PRENOM, NEW.NUM, NEW.CLASSE);
J'ai vraiment besoin d'aide !
merci
Hors ligne
Il serait bon de donner le code exact de la procédure stockée, ainsi que la définition exacte des tables. En l'occurence, vu le message de PostgreSQL? je ne peut que déduire que la table eleve n'a pas de champ nom.
Guillaume.
Hors ligne
salut ! comme je l'ai dit, j'utilise pgAdmin3. Donc voici la définition de mes tables:
pour la table eleve:
CREATE TABLE eleve
(
"NOM" character varying(50) NOT NULL,
"PRENOM" character varying(50) NOT NULL,
"NUM" integer NOT NULL,
"CLASSE" character varying(10) NOT NULL,
CONSTRAINT "clé2" PRIMARY KEY ("NUM" )
)
WITH (
OIDS=FALSE
);
ALTER TABLE eleve
OWNER TO postgres;
pour la table nouveau_depart :
CREATE TABLE nouveau_depart
(
"NOM_C" character varying(50) NOT NULL,
"PRENOM_C" character varying(50) NOT NULL,
"NUM_C" integer NOT NULL,
"CLASSE_C" character varying(10) NOT NULL,
CONSTRAINT "clé3" PRIMARY KEY ("NUM_C" )
)
WITH (
OIDS=FALSE
);
ALTER TABLE nouveau_depart
OWNER TO postgres;
Par ailleurs, le code de la fonction trigger est:
CREATE OR REPLACE FUNCTION ft_eleve()
RETURNS trigger AS
$BODY$begin
INSERT INTO nouveau_depart
VALUES (NEW.NOM, NEW.PRENOM, NEW.NUM, NEW.CLASSE);
RETURN NEW;
end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION ft_eleve()
OWNER TO postgres;
Et voici le trigger lui-même:
CREATE TRIGGER insert_after_eleve
AFTER INSERT
ON eleve
FOR EACH ROW
EXECUTE PROCEDURE ft_eleve();
merci beaucoup pour votre comprehension !
Hors ligne
Il faut utiliser des " pour spécifier la casse, par exemple new."NOM", sinon les champs seront considérés comme en minuscule.
Julien.
https://rjuju.github.io/
Hors ligne
Merci beaucoup ! Effectivement c'était un problème de casse. ça va maintenant !
Hors ligne
Pages : 1