PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 14/10/2013 13:55:44

doumib
Membre

creation de trigger avec pgAdmin3

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

#2 14/10/2013 23:19:58

gleu
Administrateur

Re : creation de trigger avec pgAdmin3

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

#3 16/10/2013 17:36:06

doumib
Membre

Re : creation de trigger avec pgAdmin3

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

#4 16/10/2013 17:43:38

rjuju
Administrateur

Re : creation de trigger avec pgAdmin3

Il faut utiliser des " pour spécifier la casse, par exemple new."NOM", sinon les champs seront considérés comme en minuscule.

Hors ligne

#5 17/10/2013 11:05:16

doumib
Membre

Re : creation de trigger avec pgAdmin3

Merci beaucoup ! Effectivement c'était un problème de casse. ça va maintenant !

Hors ligne

Pied de page des forums