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 ?

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 ;
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