· 8 years ago · Mar 30, 2018, 06:32 AM
1DELIMITER $$
2
3DROP PROCEDURE IF EXISTS truncar_tablas $$
4CREATE PROCEDURE truncar_tablas()
5BEGIN
6
7 DECLARE x INT;
8 DECLARE numtablas INT;
9 DECLARE nombretabla VARCHAR(100);
10
11 SET FOREIGN_KEY_CHECKS = 0;
12
13 SELECT COUNT(nombre) INTO numtablas FROM tablas_a_borrar;
14 SET x = 0;
15
16 -- hacemos un bucle que leerá todos los nombres de las tablas
17 truncate_loop: LOOP
18
19 -- si ya hemos atravesado todas las tablas, salimos del bucle
20 IF x > numtablas THEN
21 LEAVE truncate_loop;
22 END IF;
23
24 -- seleccionamos el nombre de la tabla
25 SELECT nombre
26 INTO nombretabla
27 FROM tablas_a_borrar
28 LIMIT x, 1;
29
30 -- construÃmos dinámicamente el TRUNCATE para la siguiente tabla
31 SELECT CONCAT('TRUNCATE ',GROUP_CONCAT(CONCAT('stackoverflow.',table_name)),';')
32 INTO @codigotruncar
33 FROM information_schema.tables
34 WHERE 'stackoverflow' = database()
35 AND table_name IN (SELECT DISTINCT nombre FROM tablas_a_borrar WHERE nombre = nombretabla);
36
37 -- preparamos y ejecutamos el SQL dinamicamente
38 PREPARE stmt FROM @codigotruncar;
39 EXECUTE stmt;
40 DEALLOCATE PREPARE stmt;
41
42 SET x = x + 1;
43
44 END LOOP;
45
46 SET FOREIGN_KEY_CHECKS = 1;
47
48END $$
49
50DELIMITER ;
51
52CREATE PROCEDURE truncateAlgunas() BEGIN
53 DECLARE done BOOLEAN DEFAULT FALSE;
54 DECLARE nombreTabla VARCHAR(64);
55 DECLARE cur CURSOR FOR
56 SELECT table_name
57 FROM information_schema.tables
58 WHERE table_name NOT IN (SELECT nombreTabla FROM excepciones);
59 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;
60
61 OPEN cur;
62
63 truncateLoop: LOOP
64 FETCH cur INTO nombreTabla;
65 IF done THEN
66 LEAVE truncateLoop;
67 END IF;
68 PREPARE statement FROM CONCAT("TRUNCATE TABLE ", nombreTabla);
69 EXECUTE statement;
70 DEALLOCATE PREPARE statement;
71 END LOOP truncateLoop;
72
73 CLOSE cur;
74END
75
76List<String> tablas = { "a", "b", "c" };
77List<String> excepciones = { "b" };
78String sentencia;
79
80for(var tabla in tablas) {
81 if (!excepciones.contains(tabla)) {
82 sentencia += "TRUNCATE TABLE " + tabla + ";";
83 }
84}
85
86mySqlConnection.execute(sentencia);