Trigger qui n'aime pas les doublons
Bonjour a tous,
Merci à tous ceux qui liront ce post et qui proposeront une solution.
Je voudrais créer un trigger que j’exécuterais avant l'insertion dans ma table, pour vérifier si un nom n'est pas déjà présent et si c'est le cas il rajoute un "(*)" à la chaine de caractère avant de procéder à l'insertion de celle-ci.
Voici la table en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| -- Table: objet
-- DROP TABLE objet;
CREATE TABLE objet
(
id serial NOT NULL,
nom character varying(10) NOT NULL,
CONSTRAINT objet_pkey PRIMARY KEY (nom),
CONSTRAINT objet_id_key UNIQUE (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE objet
OWNER TO postgres; |
J'avais une petite idée mais cela ne fonctionne pas
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| CREATE OR REPLACE FUNCTION verifierInsertionObjet()
RETURNS trigger AS
$BODY$
BEGIN
DECLARE existe INTEGER;
-- On verifie si le nom de l'objet existe deja dans la table objet
SELECT EXISTS( SELECT * FROM objet where nom = NEW.nom )
INTO existe;
-- On traite le nom si il y a deja existance dans la table
IF existe THEN
NEW.nom = NEW.nom+"(*)";
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION decrementernbobjet()
OWNER TO postgres; |
le select Exists le renvoie une erreur sous postgresql :/
Merci beaucoup pour votre aide.