Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Wed 29 March 2023 14:34

ploufplouf007
Participant occasionnel
Date d'inscription: 14 Oct 2012
Messages: 14

Triggers de mise à jour sur une liste

Bonjour à tout le monde.

Alors voilà, étant novice dans le monde des triggers, je butte sur un problème...

J'ai deux tables :


Table A :

A1   A2       DATE

1     X;Y;Z   29/03/2023
2     K;L;M   01/04/2023

Table B

B1    B2    B3      B4
1      X                true
2      Y                true
3              Z        true
4              K        false
5              L        false
6      M               false


L'idée, ce que le champ A2 contient une liste d'identifiants séparés par ;
Le champ DATE est mis à jour, c'est de cette mise à jour que le trigger doit se déclencher (si DATE > cast(now() as date) )

Une fois le trigger déclenché, c'est le champ B4 qui doit être modifié.
Si la condition au-dessus est vérifié, alors le champ (booléen) passe à true, sinon ça reste par défaut en false.
Et, puisque sinon c'est pas assez tordu, les identifiants du champ A2 ont une référence tantôt dans le champ B2 tantôt dans le champ B3.


J'ai fait un trigger, qui ne semble pas poser de problème de code en soit (j'arrive à le sauvegarder sans que pgadmin me saute dessus), mais quand je vais les mises à jour, rien ne se passe...
Il est déclaré en AFTER, FOR EACH ROW, et autant en INSERT qu'en UPDATE.


BEGIN

IF NEW.DATE > cast(now() as date)
THEN

UPDATE B
SET NEW.B4 = 'true'
where B2 in (select regexp_split_to_table(A2,';')from A INNER JOIN B on A2 = B2) or B3 in (select regexp_split_to_table(A2,';')from A INNER JOIN B on A2 = B3);

END IF ;
RETURN NEW;
END ;

Est-ce que quelqu'un aurait une idée ?

Merci d'avance smile

Dernière modification par ploufplouf007 (Wed 29 March 2023 14:36)

Hors ligne

 

#2 Thu 30 March 2023 09:13

JP LLORENS
Participant assidu
Date d'inscription: 12 Nov 2008
Messages: 231

Re: Triggers de mise à jour sur une liste

Bonjour.
Si le trigger se déclenche sur la table A, alors les notions de NEW et OLD ne s'appliquent que sur cette table. Pour mettre à jour B, alors il suffit de passer une simple requête Update sans le NEW (UPDATE B SET B4 = 'true' where B2 ....)
Cordialement
JP

Hors ligne

 

Pied de page des forums

Powered by FluxBB