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 :
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 ?
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
Merci beaucoup de votre aide !
M.
Partager