Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
j'ai une fonction qui doit boucler sur plusieurs vues d'une même table pour insérer des alertes dans une autre table.
Le traitement est identique, à un libellé près.
Est-il possible de ne pas dupliquer le traitement en ayant la liste des vues dans un tableau, ou avec un execute ?
Mes recherches n'ont rien donné.
Mon code actuel :
delete from agenda where typ_event = 3;
FOR vmandat IN SELECT * FROM v_mandat_renouv LOOP
... trt ...
vdesc :="blabla";
INSERT into agenda...
END LOOP;
FOR vmandat IN SELECT * FROM v_mandat_fin_exclu LOOP
... trt ...
vdesc := "blibli";
INSERT into agenda...
END LOOP;
J'ai le traitement de 3 autres vues à ajouter .
Merci pour vos idées
Hors ligne
Bonjour,
vous pouvez mettre votre FOR dans un autre FOR et utiliser une requête dynamique, par exemple :
FOR tbl IN SELECT relname FROM pg_class WHERE relkind = 'v' AND RELNAME like 'v_mandat%' LOOP
FOR vcurrent IN EXECUTE 'SELECT * FROM ' || tbl.relname LOOP
--traitement
END LOOP;
END LOOP;
Julien.
https://rjuju.github.io/
Hors ligne
Merci , je vais essayer .
Hors ligne
Ca marche super . J'ai juste corrigé "tbl.relname" en "tbl" .
Merci, je ne connais pas encore le méta-dictionnaire et n'ai pas le réflexe de l'utiliser.
Ca viendra
Hors ligne
Vous avez le dictionnaire système, mais si vous préférez il y a également des vues plus simples, comme pg_tables et pg_views dans votre cas.
Bon courage
Julien.
https://rjuju.github.io/
Hors ligne
Sinon, il y a aussi l'information_schema, qui est à peu près le même sur tous les SGBD qui l'implémentent.
Marc.
Hors ligne
Pages : 1