Bonjour,
Je suis entrain de réaliser une fonction pour un trigger et lorsque j'essaye de l'enregistrer je reçois une erreur dans l'assignation de la variable dernier_toquage. L'erreur est la suivante :
ERREUR: erreur de syntaxe sur ou près de « SELECT »
LINE 1: SELECT SELECT date_toquage FROM projet.toquages WHERE avent...
^
QUERY: SELECT SELECT date_toquage FROM projet.toquages WHERE aventurier_id = $1 AND toquemon_id = $2
CONTEXT: SQL statement in PL/PgSQL function "est_toquable" near line 7
********** Erreur **********
ERREUR: erreur de syntaxe sur ou près de « SELECT »
État SQL :42601
Contexte : SQL statement in PL/PgSQL function "est_toquable" near line 7
Je ne comprend pas tellement d'où provient l'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 CREATE FUNCTION projet.est_toquable() RETURNS TRIGGER AS $$ -- Existe une variable NEW qui est un tuple (RECORD) dernier_toquage timestamp; BEGIN IF (TG_OP = 'INSERT') THEN -- recupere la date du dernier toquage dernier_toquage := SELECT date_toquage FROM projet.toquages WHERE aventurier_id = NEW.aventurier_id AND toquemon_id = NEW.toquemon_id; -- si le tokemon n'a jamais été toqué ou si cela remonte à plus d'une semaine IF (dernier_toquage IS NULL) OR (dernier_toquage < NOW() - INTERVAL '7 days') THEN -- Incrementer la table aventurier (nombre_toquage) UPDATE projet.aventuriers SET nombre_toquage = nombre_toquage++ WHERE aventurier_id = NEW.aventurier_id; -- Incrementer la table toquemon (nombre_total_toquage) UPDATE projet.toquemon SET nombre_toquage = nombre_toquage++ WHERE toquemon_id = NEW.toquemon_id; -- sinon ELSE -- on leve une exception (j'ai mit une exception au hazard, faudra vérifier comment les récups en java) RAISE EXCEPTION invalid_transaction_terminaison; END IF; END IF; END; $$ LANGUAGE plpgsql;
Merci d'avance.
Partager