Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 07/12/2016 18:44:41
- arasleva
- Membre
mise à jour du champ clé étrangère
Bonjour,
j'aimerais savoir comment paramétrer mes tables ou ma vue pour que le champ "foreign key" se remplisse automatiquement.... j'ai bien mis dans la structure de mes tables les contraintes de clés primaires et clé étrangère, j'ai aussi une vue qui reprend l'ensemble des champs de mes 2 tables. Quand je saisie des données dans cette vue, les champ_a et champ_b se remplissent bien mais pas le champ "clé étrangère" a_id........
voici la structure de mes tables :
tablea
id_a (pk - serial)
champa
et
tableb
id_b (pk - serial)
a_id (fk - integer)
champb
et voici celle de ma vue :
CREATE OR REPLACE VIEW v_test AS
SELECT
id_a,
champa,
champb,
FROM tablea
JOIN tableb ON tablea.id_a = tableb.a_id
CREATE TRIGGER tablea_trg
INSTEAD OF INSERT OR UPDATE OR DELETE
ON v_form
FOR EACH ROW
EXECUTE PROCEDURE tablea_fct_trg();
CREATE TRIGGER tableb_trg
INSTEAD OF INSERT OR UPDATE OR DELETE
ON v_form
FOR EACH ROW
EXECUTE PROCEDURE tableb_fct_trg();
pouvez-vous m'aider?
Dernière modification par arasleva (08/12/2016 11:45:20)
Hors ligne
#2 07/12/2016 19:00:23
- rjuju
- Administrateur
Re : mise à jour du champ clé étrangère
Bonjour,
Il faudrait la définition des fonctions table_a_fct_trg() et table_b_fct_trg(). Sinon, je pense qu'un seul trigger pour mettre à jour les deux tables serait une meilleure idée.
Julien.
https://rjuju.github.io/
Hors ligne
#3 08/12/2016 11:47:53
- arasleva
- Membre
Re : mise à jour du champ clé étrangère
Bonjour,
ha en effet si je peux regrouper mes triggers en un seul se serait mieux!! je ne savias pas que cela était possible.
Voici la structure de mes triggers
trigger tablea :
CREATE OR REPLACE FUNCTION exo.tablea_fct_trg()
RETURNS trigger AS
$BODY$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO exo.tablea (id_a, champa, geom) VALUES (DEFAULT, NEW.champa, NEW.geom);
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
UPDATE exo.tablea SET (id_a, champa, geom) = (DEFAULT, NEW.champa, NEW.geom)
WHERE id_a = NEW.id_a;
RETURN NEW;
ELSIF TG_OP = 'DELETE' THEN
DELETE FROM exo.tablea
WHERE id_a = OLD.id_a;
RETURN NULL;
END IF;
RETURN NEW;
END;
Trigger tableb :
CREATE OR REPLACE FUNCTION exo.tableb_fct_trg()
RETURNS trigger AS
$BODY$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO exo.tableb (champb, geom) VALUES (NEW.champb, NEW.geom);
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
UPDATE exo.tableb SET (champb, geom) = (NEW.champb, NEW.geom)
WHERE id_b = NEW.id_b;
RETURN NEW;
ELSIF TG_OP = 'DELETE' THEN
DELETE FROM exo.tableb
WHERE id_b = OLD.id_b;
RETURN NULL;
END IF;
RETURN NEW;
END;
Dernière modification par arasleva (08/12/2016 11:49:13)
Hors ligne
Pages : 1