j'ai créer un prototype d'outils de traitement de texte dont une partie servira à écrire des scénarios(livre, film, pièce de théâtre, BD, jeu vidéo, etc.). Dans ma base chaque œuvres est divisée en actes(dont le type varie selon le format(chapitre, partie, niveaux, etc.) certain type d'actes peuvent même être des sous-partie d'un autre type d'acte) et chaque acte en scènes(pdv narrateur, séquence, pages, plateaux, etc.). À chaque acte et scène est donc associer une valeur ordre qui désigne sa position dans l’œuvre ou l'acte. Cette valeur ne peux pas être null et il y a une contrainte d'unicité entre l'ordre et l'id de l'objet contenant. J'ai écris le code de trigger qui si la valeur ordre est null elle prendra la première valeur non utilisé, car un auteur peut faire un trou qu'il prévois de remplir plus tard, ou si elle est déjà utilisée toutes les autres seront décalé jusqu'au prochain trou. Le reste étant géré en PHP. Mais le programme ne compile pas et j'ai beau relire, je ne vois pas pourquoi. Ai-je mal écrit est-ce impossible à faire avec un trigger ? Devrais-je utiliser une procédure ou PHP pour cette fonctionnalité ?
WHERE actes.oeuvre_id = NEW.oeuvre_id AND actes.ordre_a >= NEW.ordre_a
ORDER BY actes.ordre_a;
OPEN v_i;
FETCH v_i INTO ordre_u;
WHILE ordre_u = v_j
FETCH v_i INTO ordre_u;
SET v_j = v_j + 1;
END WHILE;
CLOSE v_i;
WHILE v_j != NEW.ordre_a
UPDATE actes
SET actes.ordre_a = v_j
WHERE actes.oeuvre_id = NEW.oeuvre_id AND actes.ordre_a = (v_j - 1);
SET v_j = v_j - 1;
END WHILE;
END IF;
END |
et voici ce que m'affiche la console
ERROR 1064 (42000): Erreur de syntaxe près de 'DECLARE v_j INT DEFAULT 1;
DECLARE v_i CURSOR
FOR SELECT act' à la ligne 5
- Edité par EvaMoulard 1 juin 2020 à 16:17:44
Trigger qui ne compile pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.