Bonjour,
Je travaille sous Postgre et je dispose de 2 tables (TableA et TableB) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE TableA ( id_A integer NOT NULL DEFAULT nextval('seq_A'::regclass), geom geometry(Point,2154), num_A character varying(10), CONSTRAINT pk_id_A PRIMARY KEY (id_A), CONSTRAINT enforce_geotype_geom CHECK (st_geometrytype(geom) = 'ST_Point'::text OR geom IS NULL), CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 2154) ) WITH ( OIDS=TRUE ); ALTER TABLE TableA OWNER TO sig; GRANT ALL ON TABLE TableA TO sig;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE TableB ( id_B integer NOT NULL DEFAULT nextval('seq_B'::regclass), num_B character varying(10), A_id integer), CONSTRAINT pk_id_B PRIMARY KEY (id_B), CONSTRAINT fk_B FOREIGN KEY (A_id) REFERENCES TableA (id_A) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE WITH ( OIDS=TRUE ); ALTER TABLE TableB OWNER TO sig; GRANT ALL ON TABLE TableB TO sig;
J'ai mis en place une Vue (MaVue), afin de consulter tous les champs de mes 2 tables,
Cette vue comprend également un Trigger (MonTrigger):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 CREATE OR REPLACE VIEW MaVue AS SELECT row_number() OVER () AS id_unique, TableA.id_A, TableA.num_A, TableB.num_B FROM TableA LEFT JOIN TableB ON TableA.id_A = TableB.A_id; ALTER TABLE MaVue OWNER TO sig; GRANT ALL ON TABLE MaVue TO sig; CREATE TRIGGER vue_trg INSTEAD OF INSERT OR UPDATE OR DELETE ON MaVue FOR EACH ROW EXECUTE PROCEDURE MonTrigger();
Et voici mon Trigger :
En l'état quand je saisis dans ma vue, les enregistrements vont remplir uniquement ma TableA et pas la TableB....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 CREATE OR REPLACE FUNCTION MonTrigger() RETURNS trigger AS $BODY$ DECLARE new_id_A BIGINT; BEGIN IF (TG_OP = 'INSERT') THEN SELECT nextval('seq_A')INTO new_id_A; INSERT INTO TableA (geom, num_A) VALUES (NEW.geom, NEW.num_A); RETURN NEW; INSERT INTO TableB (A_id, num_B) VALUES (DEFAULT, NEW.num_B); RETURN NEW; ELSIF (TG_OP = 'UPDATE') THEN UPDATE TableA SET (geom, num_A) = (NEW.geom, NEW.num_A) WHERE id_A = NEW.id_A; UPDATE TableB SET (num_B) = (NEW.num_B) WHERE id_A = NEW.id_A; RETURN NEW; ELSIF (TG_OP = 'DELETE') THEN DELETE FROM TableA WHERE id_A = OLD.id_A; DELETE FROM TableB WHERE A_id = OLD.id_A; RETURN NULL; END IF; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION MonTrigger() OWNER TO sig;
Quelqu'un peut-il m'aider?
Partager