Bonjour à tous !
Je fais appel à votre savoir car je bloque un peu, j'essaye de créer une procédure stockées pour mettre à jour plusieurs tables et je m'y perd un peu.
En gros j'ai ajouté un champ sur toutes les tables de ma bdd (pour ceux qui se demande le use case => multitenancy). Mon besoin est maintenant de parcourir toutes les tables qui possèdent cette colonne et de mettre à jour la valeur de chaque entrée (qui est NULL actuellement)
Je me suis inspiré de ce que j'ai pu voir par ci, par là mais le résultat est décevant => aucune entrée mise à jour :/ Dans la doc j'ai pu lire qu'un cursor est readonly, peut être est-ce la cause de mon problème ?
Note : n'étant pas mon métier je suis preneur de tous conseils sur les conventions de syntaxe etc (ce que j'ai pu voir est tellement hétérogène, ca n'aide pas)
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 DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `update_tenant`(IN `value` INT(1)) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE current_table VARCHAR(255); DECLARE tables_cursor CURSOR FOR SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '<db>' AND COLUMN_NAME = 'tenant_id'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN tables_cursor; update_loop: LOOP SET done = FALSE; FETCH tables_cursor INTO current_table; IF done THEN LEAVE update_loop; END IF; UPDATE current_table SET tenant_id = value; <------- Problem here, note that SELECT CONCAT(current_table, value); looks good END LOOP update_loop; CLOSE tables_cursor; END$$ DELIMITER ;
Merci beaucoup
Partager