Bonsoir Diégane,
Les triggers paraissent tout à fait sympathiques, le codage correct du point de vue relationnel, le problème est que MySQL ne l’entend pas de cette oreille : La variable @N1 ne prend pas la valeur de CorpsTypeId, mais une valeur qui en tout cas n’est pas scalaire... La comparaison de @N1 et @N2 semble donner quelque chose comme null, que l’on utilise l’égalité ou l’inégalité : l’erreur n’est donc pas déclenchée. J’ai fouillé dans la doc, mais n’ai pas trouvé la solution.
J’ai essayé de ne pas utiliser de variable :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 IF (SELECT CORPS.CorpsTypeId AS a FROM TEXTE_CORPS_TYPE_CORPS INNER JOIN CORPS ON TEXTE_CORPS_TYPE_CORPS.CorpsId = CORPS.CorpsId WHERE TEXTE_CORPS_TYPE_CORPS.CorpsId = NEW.CorpsId AND TEXTE_CORPS_TYPE_CORPS.TexteId = New.TexteId) <> (SELECT TEXTE_CORPS_TYPE.CorpsTypeId AS b FROM TEXTE_CORPS_TYPE_CORPS INNER JOIN TEXTE_CORPS_TYPE ON TEXTE_CORPS_TYPE_CORPS.TexteId = TEXTE_CORPS_TYPE.TexteId WHERE TEXTE_CORPS_TYPE_CORPS.CorpsId = NEW.CorpsId AND TEXTE_CORPS_TYPE_CORPS.TexteId = New.TexteId) THEN SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'merdum !' ; END IF ;
Mais peine perdue, MySQL et la comparaison d’expressions de tables ça fait deux...
J’ai essayé d’utiliser une table temporaire à une ligne et deux colonnes pour stocker le résultat de chaque SELECT : même punition.
La question est donc : comment affecter à une variable scalaire la valeur d’une cellule (une colonne, une ligne) d’une table ? Pour le moment je n’ai pas de réponse, mais je vais continuer à fouiller, je vais essayer le SELECT INTO...
C’est bien le cas. Si dans la structure s1, le projet p1 doit pouvoir être repris plus d’une fois lorsqu’il est dans l’état disons e1, alors l’attribut EtatDate devrait entrer dans la composition de la clé.
Partager