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

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;
Je ne comprend pas tellement d'où provient l'erreur.

Merci d'avance.