Réception requête dans fonction trigger
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 :
Citation:
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:
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.