Bonsoir,

Voila j utilise des procédure pour rechercher et tagger des reviews qui sont insérer dans ma base.

J ai une procédure qui est appeler lors de l insertion, et une autre lorsque la liste des tags change.

Mon problème est que ma procédure categorisation avorte sans raison avant d avoir parcouru toutes les catégories.

Le probleme vient de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SELECT `id` INTO v_id FROM `Reviews` WHERE `CategoryID` = v_categoryid AND `FeedbackID` = v_feedbackid;
car lorsque je le neutralise, la boucle parcourt bien toutes les occurrences.
Et la même requête dans recategorisation fonctionne parfaitement.

Merci de votre aide.

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
CREATE PROCEDURE `categorisation` (v_feedbackid INT,v_review TEXT)
BEGIN
 
    DECLARE v_done BOOLEAN DEFAULT FALSE;
    DECLARE v_categoryid INT;
    DECLARE v_id INT;
    DECLARE v_temp INT;
    DECLARE v_result INT;
    DECLARE v_list CURSOR FOR SELECT `id` FROM `Category`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
 
    OPEN v_list;
 
    REPEAT
 
      FETCH v_list INTO v_categoryid;
 
      IF NOT v_done THEN
 
        SET v_result := AllKeywords(v_review,v_categoryid);
        SELECT `id` INTO v_id FROM `Reviews` WHERE `CategoryID` = v_categoryid AND `FeedbackID` = v_feedbackid;
 
        IF v_result = 2 THEN
 
            IF v_id > 0 THEN
                UPDATE `Reviews` SET `isCompletList` = TRUE WHERE `id` = v_id;
            ELSE
                INSERT INTO `Reviews` VALUES (NULL,v_feedbackid,v_categoryid,TRUE);
            END IF;
 
        ELSEIF v_result = 1 THEN
 
            IF v_id > 0 THEN
                UPDATE `Reviews` SET `isCompletList` = FALSE WHERE `id` = v_id;
            ELSE
                INSERT INTO `Reviews` VALUES (NULL,v_feedbackid,v_categoryid,FALSE);
            END IF;
 
        END IF;
 
      END IF;
 
    UNTIL v_done  END REPEAT;
 
    CLOSE v_List;
 
END;
$$
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
CREATE PROCEDURE `recategorisation` (v_categoryid INT)
BEGIN
    DECLARE v_feedbackid INT;
    DECLARE v_id INT;
    DECLARE v_review TEXT;
    DECLARE v_result INT;
    DECLARE v_done INT DEFAULT 0;
    DECLARE v_list CURSOR FOR SELECT `id`,`Review` FROM `Feedback`;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = 1;
 
    OPEN v_list;
 
    REPEAT
 
      FETCH v_list INTO v_feedbackid,v_review;
 
      IF NOT v_done THEN
 
        SET v_result := AllKeywords(v_review,v_categoryid);
        SET v_id := 0;
 
        IF v_result = 2 THEN
 
            SELECT `id` INTO v_id FROM `Reviews` WHERE `CategoryID` = v_categoryid AND `FeedbackID` = v_feedbackid;
 
            IF v_id > 0 THEN
                UPDATE `Reviews` SET `isCompletList` = TRUE WHERE `id` = v_id;
            ELSE
                INSERT INTO `Reviews` VALUES (NULL,v_feedbackid,v_categoryid,TRUE);
            END IF;
 
        ELSEIF v_result = 1 THEN
 
            SELECT `id` INTO v_id FROM `Reviews` WHERE `CategoryID` = v_categoryid AND `FeedbackID` = v_feedbackid;
 
            IF v_id > 0 THEN
                UPDATE `Reviews` SET `isCompletList` = FALSE WHERE `id` = v_id;
            ELSE
                INSERT INTO `Reviews` VALUES (NULL,v_feedbackid,v_categoryid,FALSE);
            END IF;
 
        END IF;
 
      END IF;
 
    UNTIL v_done  END REPEAT;
 
    CLOSE v_List;
END;