Message posté par : Fabrice1234 (fabrice.neubert(a)gmail.com)
----------------------------------------
Bonjour à tous ,
Nouveau utilisateur de PostgreSQL , j'ai un problème lorsque j'exécute des
fonctions : je souhaiterais récupérer les données d'une table déjà existante , qui ne
comporte qu'une seule ligne , et qui contient tout les paramètres que je veux
exploiter en tant que variables au sein de ma fonction .
Lorsque la table contenant les paramètres sera mise à jour , les variables de ma fonction
doivent donc être mises à jour également .
Seulement , je n'arrive pas à trouver la syntaxe exacte pour faire appel à ces données
: j'ai d'abord essayé d'indiquer uniquement le nom de la colonne dans ma
fonction , mais j'obtiens un message d'erreur m'indiquant que la colonne
n'est pas reconnue , j'ai essayé ensuite d'utiliser la syntaxe
nom_de_table.nom_de_colonne pour reprendre la syntaxe qu'on utilise lorsque l'on
fait des jointures entre les tables , mais j'obtiens un message d'erreur
m'indiquant qu'il manque une clause "FROM " dans ma fonction .
En dernier recours , j'ai essayé d'utiliser la syntaxe NEW.nom_de_la_colonne , je
n'obtiens pas de message d'erreur dans ce cas précis mais le code semble ne pas
reconnaitre la valeur de la colonne que je souhaite utiliser puisqu'il fonctionne
alors comme si mes paramètres valaient zéro .
Cependant , mon code fonctionne pour des valeurs discrètes ( en rentrant les paramètres
manuellement ) .
Ci joint , vous trouverez le code que je souhaite réaliser : le but étant de créer un
réseau de table de panneaux photovoltaïques en fonction des différents paramètres du
réseau ( dimensions des panneaux , distance inter-rangée , inter-table , nombre de
panneaux en longueur , nombre de panneaux en hauteur )
(PS : la table que je souhaite utiliser est défini par : parametrage_table (
id_parametrage_table SERIAL PRIMARY KEY , inter_rang REAL , inter_table REAL , longueur
INT , hauteur INT , ht_table REAL ,l_table REAL )
CREATE OR REPLACE FUNCTION generer_tables() RETURNS TRIGGER AS $gt$
DECLARE
line_no int:= 0;
column_no int:= 0;
x real :=0;
y real :=0;
l_table real :=parametrage_table.l_table;
ht_table real :=parametrage_table.ht_table;
increment_x real :=0;
increment_y real :=0;
nom_polygone text :='' ;
hauteur int := parametrage_table.hauteur;
longueur int := parametrage_table.longueur ;
inter_rang real :=parametrage_table.inter_rang ;
inter_table real :=parametrage_table.inter_table ;
BEGIN
DROP TABLE referencement_tables ;
CREATE TABLE referencement_tables(id_table SERIAL primary KEY,geom geometry);
WHILE (line_no< hauteur) loop
WHILE (column_no< longueur) loop
column_no := column_no +1 ;
increment_x :=x+l_table ;
increment_y :=y+ht_table ;
nom_polygone := 'POLYGON'||'(('|| x ||' '|| y
||','||increment_x ||' '|| y ||','||increment_x||'
'||increment_y||','||x||' '||increment_y||','||x||'
'||y||'))' ;
INSERT INTO referencement_tables(geom)
VALUES(ST_GeometryFromText(nom_polygone));
x:= x+l_table+ inter_table;
nom_polygone :='';
END LOOP;
column_no :=0;
x:=0;
line_no :=line_no+1 ;
y:=y+ht_table+inter_rang;
END LOOP;
return NEW;
END;
$gt$ language plpgsql ;
Merci d'avance , Fabrice
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=354319#p354319
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net