PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 30/08/2022 05:55:51

Lamethode
Membre

Mise à jour de table distante

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

#2 31/08/2022 16:09:26

dverite
Membre

Re : Mise à jour de table distante

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.

Hors ligne

#3 01/09/2022 17:37:49

Lamethode
Membre

Re : Mise à jour de table distante

ah je vois.
merci beaucoup dverite

Hors ligne

Pied de page des forums