Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous,
Encore Débutant que je suis, je désire mettre à jour 4 champs d'une table B en utilisant des données d'une Table A. Il existe une relation de 1 à plusieurs allant de la table A vers la table B. Je précise que a mise à jour doit se faire à chaque fois qu'on entre une nouvelle information.
Sans trop savoir si ma vision ou mon script marchera, je tente le coup.
le script pour les 2 tables est
create table trou(
code varchar(10) PRIMARY KEY,
position_x numeric NOT NULL,
position_y numeric NOT NULL,
angle1 numeric NOT NULL,
angle2 numeric NOT NULL
);
create table contenu_trou(
code varchar(10),
debut numeric,
fin numeric,
attitude varchar(5),
debut_x numeric,
debut_y numeric,
fin_x numeric,
fin_y numeric,
geom geometry GENERATED ALWAYS AS
(ST_MakeLine(ST_Point(debut_x, debut_y,32644), ST_Point(fin_x, fin_y,32644))) STORED,
constraint con_trou primary key (code, "debut"),
CONSTRAINT "trou?" FOREIGN KEY (code)
REFERENCES trou (code) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE NO ACTION);
Pour y arriver, je décide de tenter une fonction qui pourra automatiser la mise à jour des champs (debut_x, debut_y, fin_x et fin_y) en se servant des champs debut et fin de la table trou (la relation mathématique étant connue).
Je me dit qu'un trigger pourrait faire l'affaire mais vu les paramètres à définir au préalable, je suis hésitant et j'opte pour une fonction retournant un void.
CREATE OR REPLACE FUNCTION position_contenu()
RETURNS void
as $$
DECLARE
cd varchar(10),
st numeric,
nd numeric,
x1 numeric,
y1 numeric,
x2 numeric,
y2 numeric;
BEGIN
SELECT CASE
WHEN code= $1 THEN --tester la correspondance des HoleID et opérer l'ensemble des calculs--
New.$4:=position_x+(New.$6*cos(radian(angle1))*sin(radian(180-angle2)))
AND New.$5:=position_y-(New.$6*cos(radian(angle1))*sin(radian(angle2-90)))
AND New.$6:=position_x+(New.$7*cos(radian(angle1))*sin(radian(180-angle2)))
AND New.$7:=position_y-(New.$7*cos(radian(angle1))*sin(radian(angle2-90)))
ELSE FALSE
END
FROM trou
END
$$
language 'sql';
A peine la fonction lancer, j'ai une erreur que je ne comprends pas
ERROR: ERREUR: erreur de syntaxe sur ou près de « varchar »
LINE 7: cd varchar(10),
^
Merci de m'aider.
Hors ligne
Le fait de créer des variables avec DECLARE est une fonctionnalité du langage plpgsql, mais cette fonction est déclarée avec language 'sql', donc DECLARE n'est pas possible. C'est la raison de l'erreur.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
ah je vois.
merci beaucoup dverite
Hors ligne
Pages : 1