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 :

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;
En l'état quand je saisis dans ma vue, les enregistrements vont remplir uniquement ma TableA et pas la TableB....

Quelqu'un peut-il m'aider?