Bonjour à tous,
Finalement, j'ai réussi a trouver la solution, j'ai créé deux procédures
voici les codes
la fonction split
procédure pour appeler la fonction splitCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 CREATE DEFINER=`civa`@`localhost` PROCEDURE `FNC_SPLIT`(sabots VARCHAR(600), comp_probes VARCHAR(600)) MODIFIES SQL DATA BEGIN DECLARE ret VARCHAR(600); DECLARE counter int; DECLARE n int; SET counter = 0; SET n = LENGTH(comp_probes) - LENGTH(REPLACE(comp_probes, '/', '')) + 1; WHILE (counter < n) DO -- increase the counter SET counter = counter + 1 ; -- extract the result substring before the delimiter found SET ret = SUBSTRING_INDEX(comp_probes, '/', 1); -- set mainstring right part after the delimiter found SET comp_probes = SUBSTRING_INDEX(comp_probes, '/', -(n - counter)); -- add the result substring to the table INSERT INTO base.table_split (sabots, comp_probes) VALUES (sabots, ret); END WHILE; END;
et la table qui va contenir les liens entre les modèles puis faire les insertions dans la table concernée.Code:
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 CREATE DEFINER=`civa`@`localhost` PROCEDURE `split_probes`() BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE comp_prob VARCHAR(600); DECLARE mod_num VARCHAR(600); DECLARE curComp CURSOR FOR SELECT Compatible_probes FROM sabot_olympus; DECLARE curModel CURSOR FOR SELECT Model_number FROM sabot_olympus; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE; OPEN curComp; OPEN curModel; boucle: LOOP FETCH curComp INTO comp_prob; FETCH curModel INTO mod_num; IF done THEN LEAVE boucle; END IF; CALL FNC_SPLIT(mod_num ,comp_prob); END LOOP boucle; CLOSE curComp; CLOSE curModel; END;
Ce que j'ai fait pour que ça marche, j'ai stocké les deux procédures dans le dump , puisque j'initialise ma base à partir d'un dump sous eclipseCode:
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 Create TABLE IF NOT EXISTS base.table_split( base.table_split.id int NOT NULL AUTO_INCREMENT, base.table_split.sabots VARCHAR(500) NULL DEFAULT NULL, base.table_split.comp_probes VARCHAR(500) NULL DEFAULT NULL, PRIMARY KEY (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; call split_probes(); insert into base.liens_models ( type_lien,id_model1, id_model2) SELECT (select concat('sabot','-', nature) from base.nature where id_nature= 2 ) as type_lien, m1.id_model as id_model1, m2.id_model as id_model2 FROM base.table_split as s, base.model as m1, base.model as m2 WHERE s.sabots = m1.model_number AND s.comp_probes = m2.model_number;
j'ai testé ça marche trés bien
Maintenant, ma question, comment faire pour regrouper les deux procédures dans ma transaction Sql qui contient 500 lignes.
J'ai trouvé pas mal de choses sur tsql, java et PHP mais en Sql je trouve rien.
M'aidez m'aidez S'il vous plait :(:(