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.
]]>