Update d'un champ dans plusieurs tables
Bonjour à tous ! :zoubi:
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 ?
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 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 ; |
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)
Merci beaucoup :D