|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité régulier
![]() Inscription : décembre 2004 Messages : 67 ![]() |
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:
Code :
Merci d'avance. |
|||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 647 ![]() |
bonjour,
et avec ceci est-ce que cela marche mieux ? Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : décembre 2004 Messages : 67 ![]() |
Je viens de tester et cela ne fonctionne pas non plus.
Je suis novice dans ce language et j'ai donc une question. Dans ma fonction qui sera appelé par le trigger, j'aimerai récupéré une valeur dans la table ou l'insertion va être effectuée pour vérifier s'il n'y pas déjà une entrée qui est dedans depuis moins d'une semaine. Je me demande si pour initialisé une variable je dois d'office la déclarer dans DECLARE (et qu'elle ne m'est pas passé par paramètre). Ensuite comment faire pour assigner une valeur (qui provient d'une requete, ici le select) et qu'elle soit en integer (ou timestamp) mais je dois pouvoir manipuler dans une condition (juste en dessous dans le code) pour pouvoir vérifier si la date n'est pas inférieure à une semaine. J'espère avoir mieux expliqué le problème. @Punkoff : je ne comprend pas le INTO dernier_toquage dans la requette ? C'est pour assigner dans la variable dernier_toquage ? ou pour faire référence à une autre entrée ?? Merci d'avance ! |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
A vue d'oeil voici les problèmes que tu dois corriger
1- dernier_toquage := SELECT date_toquage n'est pas possible , il faut faire le select INTO omme indiqué par punkoff pour assigner la variable 2- il manque un DECLARE au tout début pour déclarer la variable locale 3- nombre_toquage++ ne marchera pas en SQL, c'est nombre_toquage+1 4- ajouter RETURN NEW à la fin de la fonction. 5- en argument de RAISE EXCEPTION mettre une chaine de caractères au lieu d'un identifiant qui ne va pas exister. |
|
|
00
|
|
|
#5 | |||
|
Invité régulier
![]() Inscription : décembre 2004 Messages : 67 ![]() |
Je viens de retenter en prenant en compte toutes les choses que tu m'as dites et pourtant je reçois toujours une erreur.
J'ai declarer la variable dans DECLARE et j'ai rajouter le INTO dernier_toquage comme dit plus haut (ainsi que les +1 au lieu de ++). Je reçois toujours la même erreur qui me cible le SELECT ou au alentour de ce SELECT. Voici le code d'erreur ainsi que le code : Citation:
Code :
|
|||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Au lieu de:
Code :
dernier_toquage := SELECT date_toquage INTO dernier_toquage FROM projet.toquages WHERE aventurier_id = NEW.aventurier_id AND toquemon_id = NEW.toquemon_id; Code :
SELECT date_toquage INTO dernier_toquage FROM projet.toquages WHERE aventurier_id = NEW.aventurier_id AND toquemon_id = NEW.toquemon_id; |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : décembre 2004 Messages : 67 ![]() |
Merci beaucoup !
Cela marche au poil maintenant !!! Une autre question, est ce que l'on peut changer les données dans la variables NEW ? parce qu'a la fin on RETURN l'entrée new. Donc logiquement si on modifie les valeurs de la variables NEW on pourrait changer avant l'insertion dans la BDD. |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Oui on peut dans le cas d'un trigger déclenché avant l'update ou l'insert (CREATE TRIGGER BEFORE...)
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com