Vous n'êtes pas identifié(e).
Pages : 1
Désolé de ne pas avoir été assez précis dans ma question, cependant je vous remercie car la solution de modifier ma contrainte avec l'option "ON DELETE CASCADE"
fonctionne parfaitement.
Bonsoir,
Je viens vous demander de l'aide car dans le cadre d'un projet de deuxièmes années de DUT informatique, je dois créer une base de données pour un site WEB.
Cependant je suis face à un problème :
j'ai une table compte et une table Groupe, l'attribut compte du groupe fait référence à un ID de compte.
Cependant lors de la création d'un trigger pour supprimer là/les lignes du groupe correspondant à l'id du compte que je veux supprimer pour éviter de violer la contraint de clef étrangère du groupe.
J'utilise dans mon trigger la variable OLD pour retrouver l'ID du compte que je veux supprimer pour supprimer les groupes possédant cette Id dans leurs attributs GRO_Compte mais je ne peux pas car OLD n'a pas par l'attribut COM_id...
Si vous avez des pistes pour régler mon problème je vous en remercie !
Cordialement,
Clément CRAMBERT
La configuration des tables et de la fonction trigger :
CREATE TABLE atm.t_compte_com
(
com_id serial NOT NULL,
com_login character varying(50) NOT NULL,
com_password character varying(50) NOT NULL,
com_email character varying(100) NOT NULL,
com_estadmin boolean,
com_estgroupe boolean,
com_estproprietaire boolean,
com_enattente boolean DEFAULT true,
com_datedecreation date,
CONSTRAINT com_compte_pk PRIMARY KEY (com_login, com_password, com_email),
CONSTRAINT t_compte_com_com_id_key UNIQUE (com_id)
);
CREATE TABLE atm.t_groupe_gro
(
gro_id serial NOT NULL,
gro_nom character varying(200) DEFAULT NULL::character varying,
gro_pays character varying(50) DEFAULT NULL::character varying,
gro_dateformation integer,
gro_premierediscographie integer,
gro_compte integer,
CONSTRAINT gro_groupe_pk PRIMARY KEY (gro_id),
CONSTRAINT gro_groupe_fk1 FOREIGN KEY (gro_compte)
REFERENCES atm.t_compte_com (com_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE OR REPLACE FUNCTION atm."supprimerCompte"()
RETURNS trigger AS
$BODY$
BEGIN
IF EXISTS (select * from atm.t_groupe_gro where gro_compte=OLD.t_compte_com.com_id) then
delete from atm.t_groupe_gro where gro_compte=OLD.com_id;
END IF;
RETURN OLD;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
Pages : 1