Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je suis novice en matière de trigger, mais en m'appuyant sur un exemple j'ai essayé d'en mettre un en place pour concaténer des tables. Voici ce que je cherche à faire sur des tables identiques en matière de colonnes :
table1 - 500 lignes
table2 - 250 lignes
etc...
Je souhaite utiliser un trigger pour me retrouver avec :
table_concaténée - 750 lignes
Voici les différentes procédures que j'ai appliqué, pas d'erreur retournée, mais rien non plus dans la table d'agrégation :
--Création d'une fonction d'agrégation pour les tables multi_nb_gpdl
-- DROP FUNCTION public3.agreg_tables_multi_nb_gpdl();
CREATE OR REPLACE FUNCTION public3.agreg_tables_multi_nb_gpdl()
RETURNS trigger AS
$BODY$
BEGIN
IF (NEW.territoire='d06') THEN INSERT INTO public3.env_diff_09_14_d06_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSIF (NEW.territoire='d13_177') THEN INSERT INTO public3.env_diff_09_14_d13_177_multi_nb_gpdl VALUES(NEW.*); RETURN NULL;
ELSE RAISE EXCEPTION 'Erreur code dpt'; END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public3.agreg_tables_multi_nb_gpdl()
OWNER TO postgres;
--Création d'une table d'agrégation des tables "multi_nb_gpdl"
DROP TABLE IF EXISTS public3.env_diff_09_14_fr_multi_nb_gpdl
;
CREATE TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
(
id integer,
surf integer,
geom geometry,
nlochab integer,
nlogh integer,
territoire character(50)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public3.env_diff_09_14_fr_multi_nb_gpdl
OWNER TO postgres
;
CREATE TRIGGER env_diff_09_14_fr_multi_nb_gpdl_trigger
BEFORE INSERT
ON public3.env_diff_09_14_fr_multi_nb_gpdl
FOR EACH ROW
EXECUTE PROCEDURE public3.agreg_tables_multi_nb_gpdl();
Quelqu'un pourrait-il me dire ce que je ne fais pas correctement ?
Merci d'avance pour votre aide,
Fabrice.
Hors ligne
Vu le nombre de lignes concernées, faire une vue ne serait pas plus simple ?
Julien.
https://rjuju.github.io/
Hors ligne
Merci pour le retour.
En effet ce peut être une très bonne solution.
Par contre, et de prime abord, je ne sais pas concaténer des tables via une requête, et donc une vue ?
Hors ligne
Tout simplement :
SELECT champ1, champ2... FROM table1 WHERE...
UNION ALL
SELECT champ1, champ2... FROM table2 WHERE...
...
Bien évidemment, les champs doivent être identique dans chaque requête.
Julien.
https://rjuju.github.io/
Hors ligne
Super, merci beaucoup !!!
Hors ligne
Pages : 1