Bonjour,

J'ai une procédure dans laquelle une requête de sélection parse une table, réalise une extraction, puis écrit les résultats dans une autre table.
Actuellement, pour chaque résultat, je génère une requête "insert into". Je trouvais pas ça très optimisé, dans le cas ou je dépassais un certain nombre de résultats, autant réaliser un insert multiple.

En l'occurence, je ne vois pas trop comment le réaliser vu que je génère l'intégralité de la requête à la volée.

Voici le code de la procédure :

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
CREATE PROCEDURE CREATE_BRANDS()
BEGIN 
  /**
   * Flag : définit la fin de la lecture de la table CONTENT.
   */
  DECLARE done INT DEFAULT 0;
  /**
   * Variable MYBRANDS
   * Liste les marques.
   */
  DECLARE myBrand VARCHAR(35);
  /**
   * Création d'un curseur pour lecture de la table CONTENT.
   * Ce curseur stocke l'ensemble des marques.
   */
  DECLARE BRANDCURSOR CURSOR FOR SELECT BRAND FROM CONTENT GROUP BY BRAND; 
  /**
   * Gestionnaire de fin d'exécution du traitement de la requête.
   */
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  /**
   * Ouverture du curseur.
   */
  OPEN BRANDCURSOR; 
  /**
   * Lit les résultats tant que done = 1, les écrits dans la marque.
   */
  REPEAT
    FETCH BRANDCURSOR INTO myBrand;
	IF done = 0 THEN 
		INSERT INTO BRAND (LIBELLE) VALUES (myBrand) ON DUPLICATE KEY UPDATE LIBELLE = myBrand;
	END IF;
  UNTIL done
  END REPEAT;
  /**
  * Fermeture du curseur.
  */
  CLOSE BRANDCURSOR;
END
On constate que dans mon FETCH, pour chaque résultat je génère une requête. Comment faire pour générer une seule requête d'insertion (multi insert) dans ce cas précis ?

Merci beaucoup de votre aide !

M.